我对单元测试和Mockito相当陌生,我有一种方法可以进行测试,该方法在新对象上调用方法。
我如何模拟内部对象?

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

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

最佳答案

我认为实现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
            // ...
        }
    }
    

    09-05 00:06