当我在Eclipse中运行Junit测试时,以及当他们通过maven surefire从终端执行mvn clean install
运行时,我之间存在差异
在一个项目中,当我右键单击Eclipse中的src/test/java
时,Junit告诉我运行了137个测试。做mvn clean install
只给我119.在这一个,似乎测试名称中的情况可能是一个可能的解释,一些测试不是从小写开始,这使得万无一失忽略它们但是还有其他可能的解释吗?
在第二个项目中,我有一个更烦人的问题:整个测试包不是由mvn clean install
运行的。我在src/test/java
下有2个包: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
测试包中。 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>
答案 0 :(得分:1)
正如您已经发现的那样,Surefire在运行测试时有一个特定的命名约定。但是,您可以配置其他naminig约定以匹配您自己的项目的测试文件名。这对于可能没有遵守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 docs。