2011-01-28 107 views
4

我想对Business类进行测试,并且出现此问题:其中一个模拟对象对其他类(如站点,URL和ComplexObject)具有很多依赖关系。Mocking中的依赖关系过多:单元测试问题

我的问题是:如果我必须在我需要测试的方法中使用我的模拟对象的这种方法,我该如何隔离我的类?我应该嘲笑他们并将他们添加到嘲弄的对象?

+3

你能提供一个更具体的例子吗? – 2011-01-28 17:26:30

回答

4

你还能如何测试它?看起来你需要模拟依赖关系。一个积极的方面是,你可能会在其他需要测试的类中使用mock。请注意,这是一个确定的code smell

您是否想过dependency injection?如果你传递了所有的依赖关系,你可以创建一个工厂来生成一组测试依赖关系,然后重写你测试所需的依赖关系。

0

我喜欢做的是创建一个具有所有外部依赖项和静态方法的字段的类。例如:

public class DanceMakerDependecies{ 
    private URL url; 

    public String getCurrentUser(){ // not static, so very easy to test 
     return UserManager.currentUser().getName(); 
    } 

    //getter and setters 
} 

public class DanceMaker{ 
    public DanceMaker(DanceMakerDependecies dep){ 
    .. 
    } 
    // you could also create default constructor with the default dependencies 
} 

public class DanceMakerTest{ 
    @Test 
    void dance(){ 
     DanceMaker dm = new DanceMaker(); 
     dm.setDependecies(EasyMock.createMock(DanceMakerDependecies.class)); 
     //etc. 
    } 
} 

我知道,纯粹主义者会倾向于只是一切注入类,但我发现测试更简单的这种方式。尝试一下,看看你的想法(我敢打赌它不是最佳实践或设计模式,但我喜欢它)。

+0

为什么不使用IoC容器? – TrueWill 2011-01-28 19:45:20