繁体   English   中英

Spring MVC嘲笑

[英]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();

http://docs.spring.io/spring/docs/4.0.1.RELEASE/spring-framework-reference/htmlsingle/#unit-testing-spring-mvc

当然,您需要传递正确的MediaType值。

此链接可能对您有所帮助,因为作者还展示了如何测试其他测试中的预期异常的rest api。

http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-rest-api/

请求的模拟内容类型为null,因此spring mvc无法确定应调用哪个方法。 如果将值设置为application / html + xml,application / json等,它应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM