gpt4 book ai didi

java - 这是集成测试还是单元测试? (在 Spring 测试休息 Controller )

转载 作者:行者123 更新时间:2023-12-01 19:49:13 25 4
gpt4 key购买 nike

我在 Spring 为我的休息 Controller 编写测试。我有两个问题。
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)));
}

我的示例 Controller 方法如下所示:

@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);
}

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

最佳答案

Is this integration test or unit test?

这是单元测试。在这里您正在测试您的 Controller 。但我想说,它比单元测试稍微多一些。因为您不仅要测试 Controller 文件(UserController),还要测试 spring 的 Controller 层(@WebMvcTest(...))。

Should I test here validation annotations like @NotNull and @Valid and other? If no, how to disable them? Because when I pass incorrect json to post request these annotations by default will give me bad request error in response.

是的,你必须这样做(或者更确切地说你可以)。这就是我的意思,在这里您不仅可以测试 Controller 文件,还可以测试 Controller 层。如果需要,您可以通过注册模拟 validator 来禁用此功能。

External dependencies like services are mocked and class has

因此它不是集成测试。

关于java - 这是集成测试还是单元测试? (在 Spring 测试休息 Controller ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52041259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com