gpt4 book ai didi

spring - 使用自定义 ErrorAttributes 测试 Spring Boot 应用程序?

转载 作者:行者123 更新时间:2023-12-03 16:56:21 24 4
gpt4 key购买 nike

我正在尝试测试应该使用自定义错误属性的 Spring Boot RestController。

    @Bean
public ErrorAttributes errorAttributes() {
return new DefaultErrorAttributes() {

@Override
public Map<String, Object> getErrorAttributes(
RequestAttributes requestAttributes,
boolean includeStackTrace) {
Map<String, Object> errorAttributes = super.getErrorAttributes(requestAttributes, includeStackTrace);
Throwable error = getError(requestAttributes);
return errorAttributes;
}

};
}

但是,当我尝试使用简单的测试来测试自定义错误属性时,不会考虑这些属性。下面的测试实际上触发了一个请求和 i,除了使用了自定义属性。但无论我似乎做什么,代码似乎都没有考虑在内。
class TestSpec extends Specification {

MockMvc mockMvc

def setup() {
mockMvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build()
}

def "Test simple action"() {
when:
def response = mockMvc.perform(post("/hello")
.contentType(MediaType.APPLICATION_JSON)
.content('{"sayHelloTo": ""}')
)

then:
response.andExpect(status().isOk())
}
}

关于如何测试自定义属性的任何线索?

最佳答案

Spring Boot 的错误基础结构通过将请求转发到错误 Controller 来工作。正是这个错误 Controller 使用了 ErrorAttributes实例。 MockMvc 仅对测试请求转发提供了相当基本的支持(您可以检查请求是否会被转发,但不能检查转发的实际结果)。这意味着调用您的 HellowWorldController 的 MockMvc 测试,无论是使用独立设置还是基于 Web 应用程序上下文的设置,都不会驱动正确的代码路径。

几个选项:

  • 单元测试您的自定义 ErrorAttributes直接上课
  • 编写一个基于 MockMvc 的测试,调用 Spring Boot 的 BasicErrorController配置您的自定义 ErrorAttributes实例
  • 编写一个使用 RestTemplate 的集成测试对您的服务进行实际的 HTTP 调用
  • 关于spring - 使用自定义 ErrorAttributes 测试 Spring Boot 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120948/

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