我想做一个业务类的测试,但我遇到了这个问题:其中一个模拟对象对其他类有很多依赖关系,例如 Sites、URL 和 ComplexObject。
我的问题是:如果我必须在我需要测试的方法中使用我的模拟对象的这个方法,我该如何隔离我的类?我应该模拟所有这些并将它们添加到模拟对象吗?
我想做一个业务类的测试,但我遇到了这个问题:其中一个模拟对象对其他类有很多依赖关系,例如 Sites、URL 和 ComplexObject。
我的问题是:如果我必须在我需要测试的方法中使用我的模拟对象的这个方法,我该如何隔离我的类?我应该模拟所有这些并将它们添加到模拟对象吗?
我喜欢做的是创建一个类,该类具有所有外部依赖项的字段以及静态方法。例如:
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.
}
}
我知道纯粹主义者更愿意将所有内容都注入到类中,但我发现这种测试方式要简单得多。试试看,看看你的想法(我打赌它不是最佳实践或设计模式,但我喜欢它)。