【发布时间】:2015-05-21 04:25:03
【问题描述】:
我已经实现了一个带有简单请求/响应的简单控制器。
控制器
@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 + '\'' +
'}';
}
}
当我想测试默认错误处理的正确输出时,我似乎无法使用单元测试检查默认 json 格式的输出。响应似乎总是空的。当我通过正常的 curl 命令触发请求时,会看到正确的响应。我认为这是因为返回的 JSON 无法映射到 HelloWorldResponse。有什么方法可以检查返回的输出在响应正文中是否有效?
测试
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())
}
}
Json 响应
{
"timestamp" : 1426615606,
"exception" : "org.springframework.web.bind.MissingServletRequestParameterException",
"status" : 400,
"error" : "Bad Request",
"path" : "/welcome",
"message" : "Required String parameter 'name' is not present"
}
【问题讨论】:
-
你能给我们看看你的测试吗?
-
该死.. 确实忘记了测试!将其添加到问题中。
标签: json spring spring-boot