簡體   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