Junit restcotroller测试方法

时间:2018-06-13 07:12:50

标签: java rest junit

我有疑问, 我为我的控制器方法创建了一个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知道如何更正此测试以检查添加人员到团队?

1 个答案:

答案 0 :(得分:0)

您可以使用 @After + verifyNoMoreInteractions 方法确保除了 预期&#34;之外没有其他方法。叫做。

任何使用@After注释的方法都会在标记为@Test的每个方法之后调用。 (即在每个测试用例之后)

verifyNoMoreInteractions,告诉你如果调用传递给作为param(teamService和personService)的mocks所期望的任何方法(除了3方法之外),那么测试用例就会失败。

@After
public void teamdown() {
    Mockito.verifyNoMoreInteractions(teamService, personService);
}

注意:假设,您已经知道/想出的单元测试的时间和验证部分。如果您需要帮助,请告诉我。