我正在尝试使用Spring模拟模块来测试我的控制器。我补充说:
@Before
public void beforeTest() {
MockitoAnnotations.initMocks(this);
standaloneSetup(new CarController());
}效果很好。但是,我已经创建了一个带有@ExceptionHandler注释的方法的控制器通知。我想测试它在单元测试期间是否有效。我看到我可以构建一个MockMvc对象并将它传递给standaloneSetup(..)
MockMvcBuilders.standaloneSetup(
new CarController()).setHandlerExceptionResolvers(...).build();但是,当我这样做时,检查异常处理程序是否工作的测试通过了,但是使用jsonpath访问响应的所有其他测试都会因此错误而失败:
java.lang.IllegalStateException: Expected response body to be verified as JSON,
HTML or XML but content-type 'null' is not supported out of the box.
Try registering a custom parser using:
RestAssured.registerParser("null", <parser type>);
Content was:我该怎么解决这个问题?怎么啦?
的底线是我想要单元测试我的rest。例如,当我添加了一个异常处理程序时,应该如何做到这一点?
发布于 2014-02-12 19:42:48
底线是我想要单元测试我的rest。例如,当我添加了一个异常处理程序时,应该如何做到这一点?
首先,我将使用版本3.2提供的内置spring模拟框架,而不是放心(它可能很好,但也无法想象它也是集成的)。这可能包括开始的基础知识。
其次,您可以在测试方法中只使用try and catch,然后在布尔值上断言是否抛出异常。或测试是否从对状态代码500执行expect的控制器返回异常消息,例如。这将取决于您的api。
发布于 2014-02-13 05:28:36
尝试使用accept():
mockMvc.perform(post("/hotels/{id}", 42).accept(MediaType.APPLICATION_JSON));您还可以在构建MockMvc时设置返回类型。
mockMvc = standaloneSetup(new AccountController())
.defaultRequest(get("/")
.contextPath("/app").servletPath("/main")
>> .accept(MediaType.APPLICATION_JSON).build();http://docs.spring.io/spring/docs/4.0.1.RELEASE/spring-framework-reference/htmlsingle/#unit-testing-spring-mvc
当然,您需要传递适当的MediaType值。
发布于 2014-02-12 19:36:33
请求的模拟内容类型为null,因此spring无法确定应该调用哪种方法。如果将值设置为application/html+xml、application/json等,则应该正确工作。
https://stackoverflow.com/questions/21686584
复制相似问题