为什么 mvn clean install 和 eclipse 在 junit 测试中会有所不同 运行?

Why would mvn clean install and eclipse differ in junit tests they run?

当我在 Eclipse 中 运行 Junit 测试和它们 运行 通过 maven surefire 插件从终端 mvn clean install 执行

时,我在 Junit 测试之间存在差异

在一个项目中,当我在 Eclipse 中右键单击 src/test/java 时,Junit 告诉我有 137 个测试 运行。做 mvn clean install 只给我 119。在这个上,似乎测试名称中的大小写可能是一种可能的解释,有些测试不是以小写字母开头的,这使得 surefire 忽略它们,但还有其他可能的解释吗?

在第二个项目中,我有一个更烦人的问题:整个测试包不是 运行 by mvn clean install。我在 src/test/java 下有 2 个包:com.projectcom.project.services。测试 com.project 下的 类 确实是 运行,而不是 com.project.services.

下的

我能看到的唯一特点是 类 在 com.project.services 下有几个继承级别:

public class ActualTestsCasesA extends GenericTestSituationA {}

public class GenericTestSituationA extends ServicesAbstractTests {}

public abstract ServicesAbstractTests extends ProjectAbstractTests {}

ActualTestsCasesAGenericTestSituationAServicesAbstractTests都在com.project.services测试包下。 ProjectAbstractTests 保留在另一个 Maven 项目中。

这是我 pom.wml 中对 surefire 插件的依赖:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <forkMode>always</forkMode>
                <encoding>${project.build.sourceEncoding}</encoding>
                <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
            </configuration>

        </plugin>

正如您已经发现的,Surefire 在 运行ning 测试时有一个特定的命名约定。但是,您可以配置其他命名约定以匹配您自己项目的测试文件名。这对于可能未遵守 Maven 标准的遗留测试很有帮助,或者对于您不想重构的大型测试套件 classes。

查看 Surefire 文档了解详情:http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

在您的情况下,您可以将 Surefire 配置为包含带有其他模式的测试 classes:

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <forkMode>always</forkMode>
                <encoding>${project.build.sourceEncoding}</encoding>
                <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
            <includes>
                    <include>**/*Tests*.*</include>
                    <include>**/*TestSituation*.*</include>
            </includes>
            </configuration>

        </plugin>

然而,Eclipse 不受此类限制的约束。相反,它依赖于 junit4 库的存在来进行 运行 测试,并允许 jUnit 自己确定 class 是否被认为是 运行nable 测试。有关更多信息,请参阅 Eclipse Mars docs