[英]Mockito verify still fails on using all Matchers
我最近正在寫一個 JUnit 測試,我承認 Mockito 要么需要所有原始值,要么使用所有匹配器,但我發現以下情況對於所有匹配器仍然失敗,錯誤消息是:
參數匹配器的使用無效,預計 0 個匹配器:記錄 1 個:
我進行了一些測試,它看起來與使用存根方法作為 eq() 匹配器的值有關。 請參見下面的示例:
我有一個 Class 一個很簡單
public class A {
public void testMockitoMatcher(double a, String b){
}
}
這是我的測試用例
import org.junit.Test;
import static org.mockito.Mockito.*;
public class SomeUnitTest {
private A mockA = mock(A.class);
@Test
public void allMatchersDoesntWork() {
Object mockObject = mock(Object.class);
String someString = "Just some mocked String value to return";
when(mockObject.toString()).thenReturn(someString);
mockA.testMockitoMatcher(1312d, mockObject.toString());
verify(mockA, times(1)).testMockitoMatcher(anyDouble(), eq(someString)); //<- This works
verify(mockA, times(1)).testMockitoMatcher(anyDouble(), eq(mockObject.toString())); //<- This doesn't by using stub method toString() to return the String value as param to eq()
}
}
我還通過在第二個驗證語句中使用調試來驗證 mockObject.toString() 仍然可以為我返回存根值。 兩個驗證都使用所有匹配器,為什么 mockito 在第二次驗證時仍然只給我記錄了 1 個匹配器而不是 2 個匹配器?
謝謝!
Mockito 希望您的測試分三個階段進行。
您需要按此順序執行這三件事,因為 Mockito 會跟蹤您是在進行存根、驗證還是其他操作。 它還有自己的內部堆棧,用於存儲匹配器,用於存根或驗證。
在您的示例中的第二個verify
調用中,對anyDouble()
的調用將Matcher
放入堆棧。 但這會為調用mockObject.toString()
創建一個無效的 state 。
不要這樣做。 一旦准備好運行斷言和驗證,就不應再調用存根方法。 將每個測試的“安排”、“行動”和“斷言”階段彼此完全分開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.