[英]Spring MVC mocking
我正在尝试使用Spring MVC模拟模块对我的控制器进行单元测试。 我添加了这个:
@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:
我该如何解决? 怎么了?
底线是我想要对我的休息api进行单元测试。 当我为实例添加异常处理程序时,我该怎么做?
底线是我想要对我的休息api进行单元测试。 当我为实例添加异常处理程序时,我该怎么做?
首先,我将使用内置的spring模拟框架,可从版本3.2获得,并且不放心(它可能很好,但可以想象它也是集成的)。 这可能涉及的基础知识入门 。
其次,您可以try and catch
测试方法,然后在布尔值上断言是否抛出异常。 或者测试是否从控制器返回异常消息,例如,对状态代码500执行期望。 这取决于你的api。
尝试使用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();
当然,您需要传递正确的MediaType值。
此链接可能对您有所帮助,因为作者还展示了如何测试其他测试中的预期异常的rest api。
请求的模拟内容类型为null,因此spring mvc无法确定应调用哪个方法。 如果将值设置为application / html + xml,application / json等,它应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.