【发布时间】:2020-08-25 19:51:42
【问题描述】:
我发现 Surefire <exclude> 标签无法正常工作。我已经尝试过多次,并查看了 stackoverflow 和其他网站上的许多问题,以及 Surefire 的文档,所以我在这里求助。我的情况是我希望能够通过 mvn package 命令控制运行哪些测试。我有大量的测试,而且我经常需要运行所有测试,然后逐步从需要运行的列表中删除一些(因为它们已被验证为正确)。
例如,假设我有 1 到 20 个单元测试。第一次执行 mvn package 时,我想运行全部 20 个。然后我将获取测试日志,看看是否有任何测试执行没有任何问题,然后我想从下一次执行中删除这些测试。第二次执行时,我会想运行测试 1 到 12、13 到 15 和 17 到 20。单独运行这些测试或者在每个 mvn CLI 命令中排除它们都很麻烦。
我首选的解决方案是在 pom.xml 上保留一个排除测试的列表,至少在我正在经历这个测试阶段时是暂时的。现在,我的 pom.xml 如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<packaging>jar</packaging>
<version>...</version>
<name>...</name>
<url>...</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<repositories>
<repository>
...
</repository>
</repositories>
<dependencies>
...
</dependencies>
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugin</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
<enableAssertions>true</enableAssertions>
<excludes>
<exclude>**/CleanUpCodeMaatWrapperTest.java</exclude>
<exclude>**/AcdcWrapperTest.java</exclude>
<exclude>**/CSourceToDepsBuilderWrapperTest.java</exclude>
<exclude>**/JavaSourceToDepsBuilderWrapperTest.java</exclude>
<exclude>**/PipeExtractorWrapperTest.java</exclude>
<exclude>**/BatchCloneFinderWrapperTest.java</exclude>
<exclude>**/InferencerTest.java</exclude>
<exclude>**/TopicModelGeneratorTest.java</exclude>
</excludes>
</configuration>
</plugin>
...
</plugins>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<excludes>
<exclude>**/*</exclude>
</excludes>
</testResource>
</testResources>
</build>
</project>
我已尽可能完整地保留它,以免遗漏任何重要信息。如果需要来自 pom.xml 的更多信息来解决这个问题,我很乐意提供。目前,这个 pom.xml 使用命令 mvn package 会导致在我的 src/test 目录中执行所有测试,包括上面列出的测试。指定完整路径,例如src/test/AcdcWrapperTest.java,会得到相同的结果。每次执行所有测试目前可能需要一个多小时,并且通过排除我知道此时正确的这些测试中的 3 或 4 个(从执行它们数十次),我可以将其降低一半那个。我不想永久删除这些测试,或者必须重命名它们才能让 Surefire 跳过它们,因为这也很笨拙。任何帮助都将不胜感激,因为我几个月来一直在努力解决这个问题。
【问题讨论】:
-
你的测试真的在这个目录
src/test/AcdcWrapperTest.java吗? -
不,抱歉,我认为这些信息已经足够了。测试位于
src/test/java/...内自己的包目录中。这里的目录结构遵循 maven 约定,镜像src/main/java/...中的结构。另外澄清一下,我的意思是通过给出完整的路径,它仍然执行排除的测试。
标签: java maven unit-testing maven-surefire-plugin