Spring Boot Junit 测试 Rest 控制器

SpringBoot Junit Testing RestControllers

我需要知道在 spring 启动应用程序中仅测试 restControllers 是否足以进行单元测试或更好地独立测试所有 类?

没有简单的 'right' 答案。你应该自己决定。

首先值得一提的是两件事:

  • 用于测试控制器的框架:Spring MockMvc framework,用于 Spring 网络应用程序的集成测试。它可以测试单个控制器(带有模拟服务层)和整个应用程序(包括服务和数据库层,带有嵌入式数据库)。
  • 回答您应该进行哪些测试的文章:Test pyramid conception(简而言之,您应该进行大量的单元测试和少量的集成测试)。

我个人的偏好是通过集成测试(涵盖服务和数据库层)覆盖 'happy path'。

然后我用复杂的逻辑(不是所有类)覆盖单元测试类。

在我的实践中,大多数应用程序都非常简单,而且我发现我有很多集成测试而没有那么多单元测试。

Max Fariskov 说得对,我可以补充两点。

  1. 当您经常启动单元测试时,它们会正常工作。后 每次编译通常就足够了:)。这就是为什么每个单元测试都必须检查功能的一小部分。测试整个控制器是一项过于复杂的任务。

    • 将业务逻辑与控制器分离,
    • 投入使用,
    • 用自己的单元测试测试服务
    • 控制器中的模拟服务功能 - 仅测试和检查 控制器行为。
  2. 单元测试很快,但集成测试又慢又复杂。因此,将它们分成不同的组是个好主意。经常执行单元测试,只有在必要时才执行集成测试。

我用 "profiles":

  • 创建两个空接口。例如:

    public 接口单元测试 {} public 接口集成测试 {}

  • 用正确的注释标记你的测试classes

    @类别({IntegrationTest.class}) public class MySlowAndComplexServiceTest {}

    @类别({UnitTest.class}) public class MyFastServiceTest {}

    • 在你的 .pom 中创建两个配置文件

    单元测试 真的 maven-surefire-插件 2.19.1 UnitTest.class 集成测试 错误的 maven-surefire-插件 2.19.1 IntegrationTest.class,UnitTest.class

完成了。 您的单元测试将默认执行,您可以随时打开 "integrationTests" 配置文件以激活您的集成测试。