使用测试套件在特定包中运行所有JUnit4测试

24

在JUnit4中是否有可能实现这一点?

在JUnit3中,我会进行以下操作:

public class MyTestSuite {

  public static Test suite() throws Exception {
     doBeforeActions();

     try {
        TestSuite testSuite = new TestSuite();
        for(Class clazz : getAllClassesInPackage("com.mypackage")){
            testSuite.addTestSuite(clazz);
        }
        return testSuite;
     } finally {
        doAfterActions
     }
  }

...

}

你尝试用junit4运行它了吗? - bbaja42
@bbaja42 我不想使用junit4来运行这个,我想要为我的测试使用junit4的注释,并使用测试套件运行所有测试。 - Fortega
2
一个“实际”的答案会很好。不知何故,Eclipse能够通过在JUnit运行配置面板中点击一个小复选框来实现这一点。 - djangofan
2个回答

18

takari-cpsuite (最初由Johannes Link开发)提供了一个类路径套件,可以满足您的需求。 它允许通过正则表达式过滤类路径中的类,例如:

import org.junit.extensions.cpsuite.ClasspathSuite.*;
...
@ClassnameFilters({"mytests.*", ".*Test"})
public class MySuite...

14

你可以使用JUnitToolBox:

@RunWith(WildcardPatternSuite.class)
@SuiteClasses("**/*Test.class")
public class MySuite {
}

Maven配置:

<dependency>
<groupId>com.googlecode.junit-toolbox</groupId>
<artifactId>junit-toolbox</artifactId>
<version>1.5</version>
</dependency>

更多详细信息请查看https://code.google.com/p/junit-toolbox/


尝试过这个,但是不起作用,我一直收到“扫描失败”的错误提示。 - SobiborTreblinka
它只能扫描他的文件夹和子文件夹中的包。因此,您需要在com.[yourCompany]中创建一个AllTestSuite。顺便说一下,这个配置("**/*Test.class")假设所有的测试类都以"Test"结尾。 - borjab
1
请注意,如果测试被打包在jar文件中,则无法正常工作。已经有一个开放的请求来解决这个问题。https://code.google.com/p/junit-toolbox/issues/detail?id=2 - Esteban

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接