我是mockito的新手,只是想了解它是如何工作的。
我有一个想要测试的方法。方法实例化多个类来使用它的方法。
。
methodToTest{
class1 c1 = new class1();
class2 c2 = new class2();
class3 c4 = new class3();
c1.method1;
c2.method2;
c3.method3;
more logic
...
return result
}
我明白,为了测试这个方法,我需要模拟类。这是否意味着我需要解耦它并将每个类作为参数传递给方法?我想避免使用一个只有在mock时才真正需要的大量参数列表的方法。
也许我错过了什么。
谢谢你的真知灼见
我的标准解决方案是添加一个实例化类的方法:
public ClassToTest {
methodToTest{
class1 c1 = newClass1();
...
}
class1 newClass1() {
return new Class1();
}
}
新方法是protected
或包私有,我只是在我的单元测试中覆盖它以注入模拟:
@Test
public void testFoo() {
ClassToTest inst = new ClassToTest() {
class1 newClass1() {
return new Class1(); // <--- you can mock here
}
};
}
您可以在创建新对象时进行模拟,而不是将不同的类对象传递给方法。如
Class1 class1 = Mockito.mock(Class1.class);
PowerMockito.whenNew(Class1.class).withNoArguments().thenReturn(class1);
在测试类的顶部编写以下注释
@RunWith(PowerMockRunner.class)
@PrepareForTest({Class1.class})
public class Class1Test {
----------- some code-------
}
点击链接https://code.google.com/p/powermock/wiki/MockitoUsage13
希望这将解决您的问题。