我想为使用/依赖于另一个类的服务编写一个单元测试。我想做的是模拟依赖类的行为(与该类的实例相反)。正在测试的服务方法在内部使用依赖类(即,依赖类的实例没有传递到方法调用中)。因此,例如,我有一个要测试的服务法:
import DependentClass;
public class Service {
public void method() {
DependentClass object = new DependentClass();
object.someMethod();
}
}
在我对Service方法()的单元测试中,我想在DependentClass实例上模拟someMethod(),而不是让它使用真正的方法。我该如何在单元测试中设置它?
我看到的所有示例和教程都显示了对传递给被测试方法的对象实例的模拟,但我没有看到任何内容显示如何模拟类,而不是对象实例。
莫基托可能这样吗(当然是这样)?
使用Powermockito
框架和whenNew(...)
方法很容易。测试示例如下:
@Test
public void testMethod() throws Exception {
DependentClass dependentClass = PowerMockito.mock(DependentClass.class);
PowerMockito.whenNew(DependentClass.class).withNoArguments().thenReturn(dependentClass);
Service service = new Service();
service.method();
}
希望它能帮助
这是一个糟糕的设计问题。您总是可以从包私有构造函数中获取param。你的代码应该这样做:
public class Service {
DependentClass object;
public Service(){
this.object = new DependentClass();
}
Service(DependentClass object){ // use your mock implentation here. Note this is package private only.
object = object;
}
public void method() {
object.someMethod();
}
}