如何使用JUnit + Mockito模拟您尝试进行unit testing的服务中使用的类
我想为使用/依赖于另一个类的服务编写unit testing。 我想做的是模拟依赖类的行为(而不是该类的实例)。 正在测试的服务方法在内部使用依赖类(即,依赖类的实例未传入方法调用)例如,我有一个我想要测试的服务方法:
import DependentClass; public class Service { public void method() { DependentClass object = new DependentClass(); object.someMethod(); } }
在我对Service method()的unit testing中,我想在DependentClass实例上模拟someMethod()而不是让它使用真实的。 我如何在unit testing中进行设置?
我见过的所有示例和教程都显示了传递给正在测试的方法的模拟对象实例 ,但我没有看到任何显示如何模拟类而不是对象实例的内容 。
这可能与Mockito(当然是)?
使用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(); }
希望能帮助到你
这是设计不佳的问题。 您始终可以从包私有构造函数中获取参数。 你的代码应该做这样的事情:
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(); } }