繁体   English   中英

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

[英]Nested mocked method is not getting called in 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文件应用了ock-mock-maker-inline属性。

您能提出建议吗,我相信这种情况很普遍

正如@JoeC所写,这不是常见的情况。

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

为了做到这一点,您可以不模拟的情况实例化被测代码 ,并为其依赖项传递模拟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM