嵌套模拟方法未在 Mockito 中调用



假设我有这个简单的场景。

package kivoxdaemon.utils;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class TempTest {
   @Test
   public void test() {
      TestMock testMock = Mockito.mock(TestMock.class);
      Mockito.doCallRealMethod().when(testMock).method1();
      Mockito.doAnswer(new Answer() {
         @Override
         public Object answer(InvocationOnMock invocation) throws Throwable {
            System.out.println("Mock method3");
            return null;
         }
      }).when(testMock).method3();
      testMock.method1();
   }
}
class TestMock {
   void method1() {
      System.out.println("method1");
      method2();
   }
   private void method2() {
      System.out.println("method2");
      method3();
   }
   void method3() {
      System.out.println("method3");
   }
}

此代码在控制台中具有以下输出:
方法1
方法2
方法3

而我希望它是
方法1
方法2
模拟方法3

方法 3 被嘲笑了,那么为什么它没有被调用呢?

您能否建议如何实现这种我认为非常常见的场景,当调用链从真正的公共方法开始,但必须嘲笑内部调用的其他一些方法时?

提前谢谢你。

UPD:刚刚发现这是因为通过org.mockito.plugins.MockMaker文件应用的mock-maker-inline属性。

您能否建议如何实现这种我相信非常常见的情况

正如@JoeC所写,这不是一个常见的场景。

原因是:你测试了Mockito的行为,但你应该测试你的代码行为。

为此,您需要实例化待测试的代码而不模拟它,并为其依赖项传递模拟。

相关内容

  • 没有找到相关文章

最新更新