使用 maven 实现单元测试很普通,我们大多数人都熟悉项目结构和单元测试所在的位置。
然而,集成测试是不同的情况,大多数时候它们有完全不同的要求。例如,让单元测试在内存数据库中的 h2 上运行是可以的,但是当涉及到集成测试和复杂查询时,最好针对实际的关系数据库执行它们,例如一种用于生产。
考虑到上面的例子,我们的集成测试可能有不同的配置和依赖关系。
因此,我们的集成测试目标是将它们与其他测试分开并单独执行。
关于我们在源目录中的 Maven 结构,我们有主要的“文件夹”和测试“文件夹”。
以同样的方式,我们将添加一个名为“it”的额外目录。 “it”目录将包含一个用于我们的 java 源代码的 java 目录和一个资源目录。与测试目录相同的结构。
然后我们应该指导 Maven 构建我们的代码并将其添加到我们的测试源中。
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.5</version> <executions> <execution> <id>add-test-source</id> <phase>process-resources</phase> <goals> <goal>add-test-source</goal> </goals> <configuration> <sources> <source>src/it/java</source> </sources> </configuration> </execution> </executions> </plugin>
通过使用构建助手 maven 插件,我们可以指示 maven 将额外的测试源目录添加到我们的构建中。
下一步是指示 maven 运行我们的单元测试。为此,我们将使用 Maven failsafe 插件。
Failsafe 插件旨在运行集成测试,而 Surefire 插件旨在运行单元测试。选择名称 (failsafe) 既因为它是 surefire 的同义词,也因为它暗示当它失败时,它会以安全的方式进行。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.15</version> <executions> <execution> <id>integration-test</id> <goals> <goal>integration-test</goal> </goals> </execution> <execution> <id>verify</id> <goals> <goal>verify</goal> </goals> </execution> </executions> </plugin>
然后执行我们应该发出的集成测试。
mvn verify
正如预期的那样,我们的集成测试单独运行。
总而言之,我们希望将集成测试与我们的单元测试分开。我们还希望它们单独运行。这可以通过使用 maven failsafe 插件来实现。您可以在 github 上找到示例项目。
标签2: Java教程地址:https://www.cundage.com/article/jcg-integration-tests-maven.html