这是集成测试还是单元测试? (在春季测试休息控制器)

时间:2018-08-27 14:13:00

标签: java spring unit-testing junit integration-testing

我在春季为我的休息控制器编写测试。我有两个问题。
1.是集成测试还是单元测试?
2.我应该在这里测试诸如@NotNull@Valid之类的验证注释吗?如果否,如何禁用它们?因为默认情况下,当我传递不正确的json来发布请求时,这些批注会给我错误的请求错误。

诸如服务之类的外部依赖项被嘲笑,并且类具有@ExtendWith(SpringExtension.class) @WebMvcTest(value = UserController.class, secure = false) 注释。

@Test
void findByUsername_returnUser() throws Exception {
    when(userService.findByUsername(USERNAME)).thenReturn(Optional.ofNullable(user));
    when(converterContext.getConverter(ConverterShowUserDto.class)).thenReturn(converterShowUserDto);
    when(converterShowUserDto.convert(user)).thenReturn(showUserDto);
    this.mockMvc.perform(get("/user?username=" + USERNAME))
            .andDo(print())
            .andExpect(status()
                    .isOk())
            .andExpect(jsonPath("$.username", is(USERNAME)));
}

我的示例控制器方法如下:

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity getById(@PathVariable(value = "id") @ExistAccountWithId int id) {
    Optional<User> user = userService.findById(id);
    ShowUserDto showUserDto = convert(user.get());
    return new ResponseEntity<>(showUserDto, HttpStatus.OK);
}

验证仅基于自定义注释,并且全局捕获异常。所以我在控制器方法内部没有任何验证。它们彼此分开。

1 个答案:

答案 0 :(得分:3)

  

这是集成测试还是单元测试?

这是单元测试。在这里,您正在测试控制器。但这比单元测试要多一点。因为您不仅要测试控制器文件(UserController),而且还要测试spring(@WebMvcTest(...))的控制器层。

  

我应该在这里测试@NotNull和@Valid等验证注释吗   和别的?如果否,如何禁用它们?因为当我通过不正确   默认情况下发布请求这些注释的json会给我不好   请求错误以响应。

是的,您必须(或者可以)。这就是我的意思,在这里您不仅可以测试contoller文件,还可以测试控制器层。您可以通过注册模拟验证器禁用此功能。

  

诸如服务之类的外部依赖被嘲笑,类具有

因此,这不是集成测试。