空指针异常 Mockito 参数不同 (WebTestClient Put bodyValue)

Null Pointer Exception Mockito Argument(s) are different (WebTestClient Put bodyValue)

提问人:Mohammad Shahwez 提问时间:10/5/2022 更新时间:10/5/2022 访问量:197

问:

@Test
    void checkPutProfileNotFound() {
        ProfileDto profileDto = new ProfileDto("[email protected]", "abcd", null, null);
        when(profileService.putProfile(profileDto)).thenReturn(Mono.error(new NotFoundException()));
        webTestClient.put().uri("/profile/put")
                .bodyValue(profileDto)
                .exchange();
        verify(profileService, times(1)).putProfile(profileDto);
    }

导致空指针异常,并且还显示以下错误。如果我在 when() 和 verify() 中将 profileDto 对象替换为 any() ,则此错误将得到解决。我想知道我在测试用例中究竟在哪里犯了错误。

Argument(s) are different! Wanted:
com.example.profile.service.ProfileService#0 bean.putProfile(
    ProfileDto([email protected], name=abcd, dob=null, number=null)
);
-> at com.example.profile.controller.ProfileControllerTest.checkPutProfileNotFound(ProfileControllerTest.java:115)
Actual invocations have different arguments:
com.example.profile.service.ProfileService#0 bean.putProfile(
    ProfileDto([email protected], name=abcd, dob=null, number=null)
);
java spring nullpointerexception mockito webtestclient

评论

0赞 Jens 10/5/2022
你有方法吗?如果没有,请添加它ProfileDTOequals
0赞 Mohammad Shahwez 10/5/2022
@Jens谢谢,这解决了问题。你能告诉我mockito在哪里以及为什么使用equals方法吗?
0赞 Jens 10/5/2022
它将用于比较数据。
0赞 Mohammad Shahwez 10/5/2022
哦,好的,明白了。它将比较 when() 和 verify() 中的对象。
0赞 Jonasz 10/5/2022
您可以在此处找到类似问题的答案中的更详细解释:stackoverflow.com/a/73745189/3305737

答:

0赞 Mohammad Shahwez 10/5/2022 #1

正如评论部分所指出的,添加 equals 方法解决了这个问题,因为需要它来比较 when() 和 verify() 中的对象。