使用Maven进行单元测试 很普通,我们大多数人都熟悉项目结构和单元测试所在的位置。然而,集成测试是不同的情况,大多数时候它们有完全不同的要求。

使用Maven进行单元测试 概况

例如,让单元测试在 h2 内存数据库上运行是可以的,但是当涉及到集成测试和复杂查询时,最好针对实际的关系数据库(如生产中使用的数据库)执行它们.

考虑到上面的例子,我们的集成测试可能有不同的配置和依赖关系,所以我们集成测试的目标是将它们与其他测试分开并单独执行。

使用Maven进行单元测试

关于源目录中的 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故障安全插件。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 故障安全插件来实现。您可以在GitHub 上找到示例项目。

相关

Maven无法生成模块声明,这是为什么?

本地Jar包 如何引入到Maven项目中