模仿Mockito的“内在”对象

时间:2013-04-02 08:30:44

标签: java junit mockito

单元测试和mockito的新手,我有一个方法来测试哪个方法调用新对象。 我该如何模仿内部对象?

methodToTest(input){
...
OtherObject oo = new OtherObject();
...
myresult = dosomething_with_input;
...
return myresult + oo.methodX();
}

我可以模拟oo返回“abc”吗? 我真的只想测试我的代码,但是当我模拟“methodToTest”返回“42abc”时,我就不会测试我的“dosomething_with_input” - code ...

1 个答案:

答案 0 :(得分:4)

我认为实现methodToTest的类名为ClassToTest

  • OtherObject
  • 创建工厂类
  • 将工厂作为ClassToTest
  • 的字段
  • 任一
    • 将工厂作为ClassToTest
    • 的构造函数的参数传递
    • 或在分配ClassToTest对象时为其初始化并为工厂创建一个setter

您的测试类应该看起来像

public class ClassToTestTest{
    @Test
    public void test(){
        // Given
        OtherObject mockOtherObject = mock(OtherObject.class);
        when(mockOtherObject.methodX()).thenReturn("methodXResult");
        OtherObjectFactory otherObjectFactory = mock(OtherObjectFactory.class);
        when(otherObjectFactory.newInstance()).thenReturn(mockOtherObject);
        ClassToTest classToTest = new ClassToTest(factory);

        // When
        classToTest.methodToTest(input);

        // Then
        // ...
    }
}