Spring MVC模拟测试

3

我想使用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:

我该如何解决这个问题?出了什么问题?

底线是,我想对我的rest api进行单元测试。如果我添加了异常处理程序,我应该如何做到这一点?


这个链接可能会对你有所帮助,因为作者还展示了如何测试REST API的预期异常以及其他测试。> http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-rest-api/ - amb
你能举一个失败的测试和一个通过的测试的例子吗?我们需要查看你的异常处理程序和控制器方法。 - Sotirios Delimanolis
我想我有点误解了用法。我会看一下Spring MVC测试框架,不使用Rest Assured并尝试你的一些例子。 - LuckyLuke
3个回答

1

1
底线是我想对我的rest api进行单元测试。当我添加一个异常处理程序时,我该如何做?首先,我会使用内置的spring模拟框架(从3.2版本开始可用),而不是rest assured(它可能很好,但无法想象它集成得那么好)。这可能涵盖getting started的基础知识。其次,您可以在测试方法中try和catch,然后根据抛出异常的情况断言布尔值。或者通过期望500状态码来测试控制器是否返回了异常消息,这取决于您的api。

你是第一个引导我朝着正确方向前进的人。我已经阅读了Spring测试文档并使其正常工作。Spring MVC框架就是答案。我想我成功地将两个不同框架的类混合在一起了等。 - LuckyLuke

0

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


我应该在哪里设置这个?除了在控制器上设置一些模拟对象之外,我在测试方法中所做的就是这样:RestAssuredMockMvc.given().when().get("cars/1").then().statusCode(404); - LuckyLuke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接