【问题标题】:Acceptance test within maven structure?Maven结构内的验收测试?
【发布时间】:2021-05-02 04:26:56
【问题描述】:

我的问题是关于基于 docker 的验收测试的目录位置。

我的项目是一个基于 Spring Boot 的命令行应用程序,它从表中提取数据并构建电子表格。它具有单元测试和基于 JUnit 的验收测试。验收测试的 JUnit 运行器是标准的 JUnit 运行器,而不是基于 Spring 的运行器。

最后,我有一个验收测试结构,它根据专门为每个测试创建的专用 DB2 实例来测试 Docker 组件。此时,有一个 docker-compose 文件:

  • 专门为此测试启动一个 DB2 容器实例。
  • 启动 Flyway 迁移容器以加载测试数据。
  • 启动执行上述 Spring Boot 命令行应用程序的容器。

docker-compose 关闭后,将与生成的电子表格和预期文件进行比较。如果它们是逐字节等效的,则认为测试通过。

鉴于上面的验收测试大量使用 docker 并且从 Java 端删除了一些步骤,将这个测试放在 /src/test/acceptance 下是否仍然合适?

【问题讨论】:

  • 可能更传统的结构是使用src/test/java 进行单元/集成测试,并有一个单独的src/acceptance/java 目录用于验收测试,如果它们不是作为同一套件的一部分运行的话。不过,这确实是一个约定俗成的问题

标签: java spring-boot junit


【解决方案1】:

有很多方法可以解决这个问题。一般来说,maven 有两个插件:surefire 和 failsafe。它们在配置方面非常相似,但 surefire 主要用于运行单元测试,而 failsafe 用于集成测试。

因此,首先您可能希望使用故障安全插件配置验收测试。你会:

  • 在不同的构建阶段运行它们(至少在单元测试运行之后)
  • 如果您的构建被破坏并且某些单元测试没有成功,您甚至不想运行验收/故障安全测试 - 它可能会节省一些构建时间。
  • 您将获得用于集成和单元测试的不同报告(从技术上讲,这些插件会创建不同的报告文件夹 surefire-reportsfailsafe-reports

现在可以物理分离测试:

  • 仅依赖命名约定。这些插件查找名称不同的测试,例如:SampleTest.class 将使用surefire 运行,而SampleTestIT.class 将使用文件安全插件运行。当然,它在 pom 文件中的插件配置级别上都是可定制的。 通常,从概念上讲,单元测试需要与真实类放在同一个包中。例如:如果你在com.myorg.Foo.java 中有一个类Foo,那么你将它放在src/main/java/com/myorg/Foo.java 中,它的相应单元测试将在src/main/java/com/myorg/FooTest.java 中。集成测试通常不是这种情况,因此您可以简单地创建一个文件夹 it 或其他东西,然后使用不同的插件自动运行它们,同样因为您会以不同的方式命名测试。

另一种方法是将同一模块中的文件夹分开,上面已经描述过。所以从技术上讲,你维护src/test/javasrc/test/resources,在它旁边你会有src/it/javasrc/it/resources 之类的东西。可能你仍然想使用我上面描述的surefire和failsafe插件。您仍将在同一个 Maven 生命周期中运行这两种类型的测试。

最“激进”的方法是将验收测试分离到不同的 maven 模块。这将使您能够在不同的构建步骤中分别运行带有验收测试的模块。例如,这在 CI 工具中可能很方便。当然,您可以使用属性或使用 maven 配置文件实现类似的效果。

【讨论】:

    【解决方案2】:

    您可以参考https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html 最好有单独的目录进行测试。我建议对所有测试进行测试,并有单独的文件夹,test/acceptance/docker-test 或其他东西,但总的来说这取决于你。 单独的文件夹确实有助于运行和分离不同的测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多