我想对Business类进行测试,并且出现此问题:其中一个模拟对象对其他类(如站点,URL和ComplexObject)具有很多依赖关系。Mocking中的依赖关系过多:单元测试问题
我的问题是:如果我必须在我需要测试的方法中使用我的模拟对象的这种方法,我该如何隔离我的类?我应该嘲笑他们并将他们添加到嘲弄的对象?
我想对Business类进行测试,并且出现此问题:其中一个模拟对象对其他类(如站点,URL和ComplexObject)具有很多依赖关系。Mocking中的依赖关系过多:单元测试问题
我的问题是:如果我必须在我需要测试的方法中使用我的模拟对象的这种方法,我该如何隔离我的类?我应该嘲笑他们并将他们添加到嘲弄的对象?
你还能如何测试它?看起来你需要模拟依赖关系。一个积极的方面是,你可能会在其他需要测试的类中使用mock。请注意,这是一个确定的code smell。
您是否想过dependency injection?如果你传递了所有的依赖关系,你可以创建一个工厂来生成一组测试依赖关系,然后重写你测试所需的依赖关系。
我喜欢做的是创建一个具有所有外部依赖项和静态方法的字段的类。例如:
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.
}
}
我知道,纯粹主义者会倾向于只是一切注入类,但我发现测试更简单的这种方式。尝试一下,看看你的想法(我敢打赌它不是最佳实践或设计模式,但我喜欢它)。
为什么不使用IoC容器? – TrueWill 2011-01-28 19:45:20
你能提供一个更具体的例子吗? – 2011-01-28 17:26:30