5

对单元测试和模拟非常陌生,我有一个方法来测试它调用一个新对象的方法。如何模拟内部对象?

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

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

4

1 回答 1

5

我认为实现的类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
        // ...
    }
}
于 2013-04-02T11:32:07.733 回答