模拟使用外部类的方法,mockito

我是mockito的新手,只是想了解它是如何工作的。

我有一个我想测试的方法。 该方法实例化多个类以使用其方法。

例如

methodToTest{ class1 c1 = new class1(); class2 c2 = new class2(); class3 c4 = new class3(); c1.method1; c2.method2; c3.method3; more logic ... return result } 

我明白为了测试这个方法我需要模拟类。 这是否意味着我需要将其解耦并将每个类作为参数传递给方法? 我想避免使用一个使用大量参数的方法,这些参数只有在模拟时才真正需要。

也许我错过了什么。

感谢您的见解。

我的标准解决方案是添加一个实例化类的方法:

 public ClassToTest { methodToTest{ class1 c1 = newClass1(); ... } class1 newClass1() { return new Class1(); } } 

新方法protected或包私有,我只是在unit testing中覆盖它以注入模拟:

 @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链接

希望这能解决你的问题。 询问查询。