嘲笑使用外部类的方法,mockito

时间:2014-07-22 10:12:00

标签: java unit-testing mockito

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

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

e.g。

methodToTest{
 class1 c1 = new class1();
 class2 c2 = new class2();
 class3 c4 = new class3();

c1.method1;
c2.method2;
c3.method3;

more logic 

...

return result
}

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

也许我错过了什么。

感谢您的见解。

2 个答案:

答案 0 :(得分:2)

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

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
        }            
    };
}

答案 1 :(得分:2)

不是将类的不同对象传递给方法,而是可以在创建新对象时实际模拟。 例如

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

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