我有疑问, 我为我的控制器方法创建了一个junit测试,但我不确定这个测试看起来不错。测试通过确定但身体对我来说不清楚。 这是我想测试的方法:
@PostMapping("/addPeopleToTeams/{teamId}/{personId}")
@ResponseBody
public ResponseEntity<?> addPeopleToTeam(@PathVariable Long teamId, @PathVariable Long personId) {
TeamsAndPersonsId teamsAndPersonsId = new TeamsAndPersonsId(personId, teamId);
teamService.findTeamById(teamsAndPersonsId.getTeamId());
personService.findById(teamsAndPersonsId.getPersonId());
teamService.addPersonsToTeams(personId, teamId);
return ResponseEntity.ok(teamsAndPersonsId);
}
这是我的考验:
@Test
public void shouldAddPersonToTeam() throws Exception {
// Given
TeamDto teamDto = prepareTeamDto();
PersonDto personDto = preparePersonDto();
// When
verify(teamService, times(0)).createTeam(teamDto);
teamService.createTeam(any());
verify(personService, times(0)).addPerson(personDto);
personService.addPerson(any());
// than
mockMvc.perform(post("/addPeopleToTeams/{teamId}/{personId}", 1, 1))
.andExpect(status().isOk());
}
private PersonDto preparePersonDto() {
return new PersonDto(1L, "Bob", "Noob", "mail@first.pl", "Warszawa", "APPS", "Developer");
}
private TeamDto prepareTeamDto() {
return new TeamDto(1L, "Jan", "local", "wawa", 6);
}
这不是一个愚蠢的想法,我有0倍?这意味着我调用该方法0次? Smb知道如何更正此测试以检查添加人员到团队?
答案 0 :(得分:0)
您可以使用 @After + verifyNoMoreInteractions 方法确保除了 预期&#34;之外没有其他方法。叫做。
任何使用@After注释的方法都会在标记为@Test的每个方法之后调用。 (即在每个测试用例之后)
verifyNoMoreInteractions,告诉你如果调用传递给作为param(teamService和personService)的mocks所期望的任何方法(除了3方法之外),那么测试用例就会失败。
@After
public void teamdown() {
Mockito.verifyNoMoreInteractions(teamService, personService);
}
注意:假设,您已经知道/想出的单元测试的时间和验证部分。如果您需要帮助,请告诉我。