我在春季为我的休息控制器编写测试。我有两个问题。
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);
}
验证仅基于自定义注释,并且全局捕获异常。所以我在控制器方法内部没有任何验证。它们彼此分开。
答案 0 :(得分:3)
这是集成测试还是单元测试?
这是单元测试。在这里,您正在测试控制器。但这比单元测试要多一点。因为您不仅要测试控制器文件(UserController),而且还要测试spring(@WebMvcTest(...)
)的控制器层。
我应该在这里测试@NotNull和@Valid等验证注释吗 和别的?如果否,如何禁用它们?因为当我通过不正确 默认情况下发布请求这些注释的json会给我不好 请求错误以响应。
是的,您必须(或者可以)。这就是我的意思,在这里您不仅可以测试contoller文件,还可以测试控制器层。您可以通过注册模拟验证器禁用此功能。
诸如服务之类的外部依赖被嘲笑,类具有
因此,这不是集成测试。