当我在Eclipse中运行Junit测试时,与当它们由maven surefire pluging从终端执行mvn clean install
时,Junit测试之间存在差异
在一个项目中,当我右键单击Eclipse中的src/test/java
时,Junit告诉我有137个测试正在运行。做mvn clean install
只给我119。在这一点上,测试名称中的大小写似乎是一种可能的解释——有些测试不是以小写开头的,这使得肯定会忽略它们,但还有其他可能的解释吗?
在第二个项目中,我遇到了一个更令人讨厌的问题:整个测试包不是由mvn clean install
运行的。我在src/test/java
下有两个包裹:com.project
和com.project.services
。com.project
下的测试类是由surefire正确运行的,而不是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
测试包下。ProjectAbstractTest保留在另一个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在运行测试时有一个特定的命名约定。但是,您可以配置额外的命名约定,以匹配您自己项目的测试文件名。这对于可能没有遵守Maven标准的遗留测试,或者对于您不想重构的大型测试类套件,都很有帮助。
查看Surefire文档了解详细信息:http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
在您的情况下,您可以将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>
<includes>
<include>**/*Tests*.*</include>
<include>**/*TestSituation*.*</include>
</includes>
</configuration>
</plugin>
然而,Eclipse并不受这些限制的约束。相反,它依赖于junit4库的存在来运行测试,并允许jUnit自己确定类是否被认为是可运行的测试。有关更多信息,请参阅Eclipse Mars文档。