为什么mvn clean install和eclipse在运行的junit测试中会有所不同?
当我在Eclipse中运行Junit测试时,与由maven surefire pluging从终端执行为什么mvn clean install和eclipse在运行的junit测试中会有所不同?,eclipse,maven,junit,maven-surefire-plugin,Eclipse,Maven,Junit,Maven Surefire Plugin,当我在Eclipse中运行Junit测试时,与由maven surefire pluging从终端执行mvn clean安装时运行Junit测试时,两者之间存在差异 在一个项目中,当我在Eclipse中右键单击src/test/java时,Junit告诉我有137个测试正在运行。执行mvn清洁安装只能得到119。在本例中,似乎测试名称中的大小写可能是一种可能的解释,一些测试不以小写开头,这使得surefire忽略它们,但还有其他可能的解释吗 在第二个项目中,我有一个更恼人的问题:整个测试包不是由
mvn clean安装时运行Junit测试时,两者之间存在差异
在一个项目中,当我在Eclipse中右键单击src/test/java
时,Junit告诉我有137个测试正在运行。执行mvn清洁安装
只能得到119。在本例中,似乎测试名称中的大小写可能是一种可能的解释,一些测试不以小写开头,这使得surefire忽略它们,但还有其他可能的解释吗
在第二个项目中,我有一个更恼人的问题:整个测试包不是由mvn clean install运行的。我在src/test/java
下有两个包:com.project
和com.project.services
。surefire正确运行com.project
下的测试类,而不是com.project.services
下的测试类
我能看到的唯一特殊性是com.project.services
下的类有几个继承级别:
public class ActualTestsCasesA extends GenericTestSituationA {}
public class GenericTestSituationA extends ServicesAbstractTests {}
public abstract ServicesAbstractTests extends ProjectAbstractTests {}
ActualTestsCasesA
、一般测试情况A
和ServicesStractTests
都在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>
org.apache.maven.plugins
maven surefire插件
2.18.1
总是
${project.build.sourceEncoding}
${project.build.sourceEncoding}
正如您已经发现的,Surefire在运行测试时有一个特定的命名约定。但是,您可以配置其他naminig约定以匹配您自己项目的测试文件名。这对于可能不遵守Maven标准的遗留测试,或者对于您不希望重构的一大套测试类,都很有帮助
有关详细信息,请查阅Surefire文档:
在您的情况下,您可以将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>
org.apache.maven.plugins
更多信息。mvn帮助:有效pom
在每个环境中运行时是否返回不同的结果?查看pom.xml上的eclipse有效pom选项卡,surefire插件部分在两侧都是相同的。检查单元测试的名称。您是否遵循单元测试的命名约定,如*Test.java*
?您可能只是对类使用了错误的命名。surefire插件包括基于文件名的测试类:-也许eclipse更聪明一些,正在扫描@test注释。因此,重命名测试以匹配surefire默认值或配置其Include以匹配您正在使用的名称应该会起作用。@wemu:就是这样,谢谢,问题出在名称中。。。