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



当我在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.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测试包下。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文档。

最新更新