java - Spring MVC 模拟

标签 java spring unit-testing jakarta-ee spring-mvc

我正在尝试使用 Spring MVC 模拟模块对我的 Controller 进行单元测试。我添加了这个:

    @Before
    public void beforeTest() {
        MockitoAnnotations.initMocks(this);
        standaloneSetup(new CarController());
    }

效果很好。然而,我已经创建了一个 Controller 建议,它有一个用 @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 进行单元测试。例如,当我添加了异常处理程序时,我应该怎么做?

最佳答案

Bottom line is that I want to unit test my rest api. How should I do this when I have added a exception handler for instance?

对于一个人,我会使用内置的 spring mock 框架,从 3.2 版开始可用,但并不放心(它可能很好,但不能想象它也被集成)。这可能涵盖了 getting started 的基础知识.

其次,您可以在测试方法中try and catch,然后断言 boolean 值是否抛出异常。或者测试是否从 Controller 返回异常消息,例如,对状态代码 500 执行期望。这将取决于您的 API。

关于java - Spring MVC 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21686584/

相关文章:

java - 使用类型系统声明 Map 字段

c# - 我们如何利用单元/测试类文件中所有文件共享的通用方法(例如登录方法)?

eclipse - 在命令行上使用gradle运行时,junit运行正常,但作为junit测试,无法在eclipse上运行

unit-testing - 为什么 `#import(" Dart :unittest")` can' t run?

java - 使用不同的参数在TestNG中重复整个测试类

java - 在 Java 中使用 for 循环打印和二维数组

java.sql.SQLRecoverableException : Io error: Invalid number format for port number in ubuntu 错误

java - 用于 Spring 缓存管理器的 Junit

json - 如何在 Spring 全局异常处理程序中处理 JSON 方法中的不同异常?

spring - 无法在桌面应用程序中使用@Autowired