簡體   English   中英

Mockito verify() 因“實際調用過多”而失敗

[英]Mockito verify() fails with "too many actual invocations"

我有一個相當復雜的測試用例,我正在嘗試將以下 verify() 添加到:

verify(userService).getUserById(anyLong()).setPasswordChangeRequired(eq(Boolean.TRUE));

這失敗並出現此錯誤:

org.mockito.exceptions.verification.TooManyActualInvocations: 
userService.getUserById(<any>);
Wanted 1 time:
-> at     test.controllers.AuthenticationControllerMockTest.testLookupsExceeded(AuthenticationControllerMockTest.java:404)
But was 4 times. Undesired invocation:

所以我把它改成了這樣:

verify(userService, atLeastOnce()).getUserById(anyLong()).setPasswordChangeRequired(eq(Boolean.TRUE));

現在它失敗了:

java.lang.NullPointerException
    at test.controllers.AuthenticationControllerMockTest.testLookupsExceeded(AuthenticationControllerMockTest.java:404)

因為這是返回空值:

verify(userService, atLeastOnce()).getUserById(anyLong())

這似乎令人費解 - 如果我使用默認值(僅一次調用),它會失敗,因為它被多次調用,但如果我告訴它多次調用是可以的,它會失敗,因為它找不到任何調用!

有人能幫忙嗎?

看起來你們倆都想模擬調用userService.getUserById()時發生的情況,並驗證setPasswordChangeRequired(true)在該返回的對象上被調用。

您可以通過以下方式完成此操作:

UserService userService = mock(UserService.class);
User user = mock(User.class);
when(userService.getUserById(anyLong())).thenReturn(user);

...

// invoke the method being tested

...

verify(user).setPasswordChangeRequired(true);

間歇性地得到同樣的錯誤。 我們發現我們錯誤地在類中添加了兩個相同類型的@Mock


@Mock
SomeClient aClient;

@Mock
SomeClient bClient;


@Test
void test(){
  verify(aClient).someMethod(any());  //passes and fails intermittently
}

刪除第二個模擬修復了片狀。

添加調用該方法的次數也應該可以解決該問題。

驗證(客戶端,次(2))。someMethod();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM