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

时间:2016-04-15 04:46:18

标签: eclipse maven junit maven-surefire-plugin

当我在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.projectcom.project.servicescom.project下的测试类可以通过surefire正确运行,而不是com.project.services下的测试类。

我能看到的唯一特异性是com.project.services下的类具有多个继承级别:

public class ActualTestsCasesA extends GenericTestSituationA {}

public class GenericTestSituationA extends ServicesAbstractTests {}

public abstract ServicesAbstractTests extends ProjectAbstractTests {}

ActualTestsCasesAGenericTestSituationAServicesAbstractTests都在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>

1 个答案:

答案 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