为什么 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.project
和 com.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 {}
ActualTestsCasesA
、GenericTestSituationA
和ServicesAbstractTests
都在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。
当我在 Eclipse 中 运行 Junit 测试和它们 运行 通过 maven surefire 插件从终端 mvn clean install
执行
在一个项目中,当我在 Eclipse 中右键单击 src/test/java
时,Junit 告诉我有 137 个测试 运行。做 mvn clean install
只给我 119。在这个上,似乎测试名称中的大小写可能是一种可能的解释,有些测试不是以小写字母开头的,这使得 surefire 忽略它们,但还有其他可能的解释吗?
在第二个项目中,我有一个更烦人的问题:整个测试包不是 运行 by mvn clean install
。我在 src/test/java
下有 2 个包:com.project
和 com.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 {}
ActualTestsCasesA
、GenericTestSituationA
和ServicesAbstractTests
都在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。