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

为什么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忽略它们,但还有其他可能的解释吗 在第二个项目中,我有一个更恼人的问题:整个测试包不是由

当我在Eclipse中运行Junit测试时,与由maven surefire pluging从终端执行
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:就是这样,谢谢,问题出在名称中。。。