当前位置: 首页 > 知识库问答 >
问题:

Mockito:通缉但未援引:[...]实际上,与这个模拟没有任何互动。"

呼延河
2023-03-14

我已经通过StackOverflow上的帖子。

想要但没有被调用:实际上,这个模拟没有任何交互。

我确实做了被要求的事情,但我仍然错过了一些东西。你能帮帮我我错过了什么吗?

我的Java代码:

public class AccountController {

    public ResponseEntity<AccountResponse> getAccountByAccountId(
            @RequestHeader("Authorization") final String accountToken,
            @PathVariable("accountId") String accountId) {

        return accountHandler.apply(() -> {

            final AcccountResponse accountResponse = accountService
                    .getAccountByAccountId(accountId);

            return ResponseEntity.ok().body(accountResponse);

        });
    }
}

我的单元测试:

@InjectMocks
private AccountController accountController;

@Mock
private AccountService accountService;

@Mock
private AccountHandler accountHandler;

@Captor
private ArgumentCaptor<Supplier<ResponseEntity<AccountResponse>>> responseAccount;

private static AccountResponse accountResponse;

@Before
public void setUp() {

    responseEntity = ResponseEntity.ok().body(accountResponse);
}

@Test
public void getAccountByAccountIdTest() {

    when(accountHandler.apply(responseAccount.capture())).thenReturn(responseEntity);
    when(accountService.getAccountByAccountId(accountId)).thenReturn(accountResponse);

    ResponseEntity<AccountResponse> accountResult = accountController.getAccountByAccountId(accountToken, accountId);

    assertNotNull(accountResult);
    assertEquals(HttpStatus.OK, accountResult.getStatusCode());
    assertSame(accountResponse, accountResult.getBody());
    verify(accountHandler).apply(responseAccount.capture());
    verify(accountService).getAccountByAccountId(accountId); // this fails and gives me error
}

一切正常工作,除了验证(accCountService). getAcCountByAcCountId(帐户ID);我得到错误作为

Wanted but not invoked:
acccountService.getAccountByAccountId(

    "accountId"
);
Actually, there were zero interactions with this mock.

共有1个答案

卢阳泽
2023-03-14

您的accountHandler是一个mock,这意味着apply将只执行您存根它要执行的操作。当你打电话给供应商时,你没有让它打电话给供应商

可能最简单的方法是在AccountHandler字段中使用真实的AccountHandler而不是模拟。

另一种方法是使用MockitoAnswer使apply方法工作。

 类似资料: