Json 如何测试Spring引导控制器的错误输出?
我用一个简单的请求/响应实现了一个简单的控制器 控制器 请求 当我想要测试默认错误处理的正确输出时,我似乎无法使用单元测试检查默认json格式的输出。回答似乎总是空的。当我通过一个普通的curl命令触发请求时,我会看到一个正确的响应。我假设这是因为返回的JSON无法映射到HelloWorldResponse上。有没有办法检查返回的输出在响应体上是否有效 试验 Json响应 尝试使用print()方法进行调试,可能在执行过程中引发异常Json 如何测试Spring引导控制器的错误输出?,json,spring,spring-boot,Json,Spring,Spring Boot,我用一个简单的请求/响应实现了一个简单的控制器 控制器 请求 当我想要测试默认错误处理的正确输出时,我似乎无法使用单元测试检查默认json格式的输出。回答似乎总是空的。当我通过一个普通的curl命令触发请求时,我会看到一个正确的响应。我假设这是因为返回的JSON无法映射到HelloWorldResponse上。有没有办法检查返回的输出在响应体上是否有效 试验 Json响应 尝试使用print()方法进行调试,可能在执行过程中引发异常 MvcResult andReturn=mockMvc.per
MvcResult andReturn=mockMvc.perform(get(“/api”)
.accept(MediaType.APPLICATION_JSON))
.andDo(print())
.andReturn()
您发布的@Controller
类与测试用例(和响应)似乎不匹配(您在测试用例中调用/hello
,而您的@RequestMapping
表示/welcome
…我们能看到正确的代码吗?看起来您有一个@RequestParam(“名称”)
设置,但你没有通过。你能给我们看一下你的测试吗?该死..确实忘记了测试!把它添加到问题中了。
@RestController
@RequestMapping("/")
public class HelloWorldController extends AbstractRestController {
@RequestMapping(value = "/hello", method = RequestMethod.POST)
public HelloWorldResponse sayHello(@Valid @RequestBody HelloWorldRequest request) {
String message = String.format("Hello %s!", request.getSayHelloTo());
return new HelloWorldResponse(message);
}
}
public class HelloWorldRequest {
@NotEmpty
@NotNull
private String sayHelloTo;
protected HelloWorldRequest() {
}
public HelloWorldRequest(String sayHelloTo) {
this.sayHelloTo = sayHelloTo;
}
public String getSayHelloTo() {
return sayHelloTo;
}
@Override
public String toString() {
return "HelloWorldRequest{" +
"sayHelloTo='" + sayHelloTo + '\'' +
'}';
}
}
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())
}
}
{
"timestamp" : 1426615606,
"exception" : "org.springframework.web.bind.MissingServletRequestParameterException",
"status" : 400,
"error" : "Bad Request",
"path" : "/welcome",
"message" : "Required String parameter 'name' is not present"
}