在JUnit中获得最多的执行TestSuite

时间:2014-12-12 15:11:26

标签: java junit

我需要知道包含当前运行的JUnit测试的套件类。例如,如果你有

@SuiteClasses({SubSuite.class})
class ParentSuite { }

@SuiteClasses({TestCase.class})
class SubSuite { }

class TestCase {
    @Test
    public void testMethod() { }
}

并使用JUnit执行ParentSuite,然后我想获得对ParentSuite.class的引用。这可能吗?

TestWatcher规则可以为您提供Description的实例,这是一个正确的方向,但不包括套件类。

我知道这可能不是编写单元测试的最佳方法。我最初的问题是对正在测试的项目中的所有类运行验证,而不是依赖项的那些类。 TestCase将位于依赖项中,并由其他项目中的测试套件包含在内。我能想到的唯一解决方案是过滤那些具有与最顶层套件相同的源位置的类。为了更清楚:

BaseLibrary
    * contains TestCase and TestSuite
    * has classes that should not be validated
ConsumerProject
    * has a test-scoped and test-classified dependency to BaseLibrary
    * contains ParentSuite
    * has classes that should be validated

1 个答案:

答案 0 :(得分:0)

您可能想要使用JUnit @Category https://github.com/junit-team/junit/wiki/Categories

这是一个关于如何制作分类https://weblogs.java.net/blog/johnsmart/archive/2010/04/25/grouping-tests-using-junit-categories-0

的博客

这样您就可以为每个项目制作分类。

public interface ConsumerProject {}

然后您可以使用@Category批注将测试类(甚至测试方法)标记为特定类别:

@Category(ConsumerProject.class)
public class TestCase { ... }

然后您的套件可以设置为运行特定类别的所有测试

@RunWith(Categories.class)
@IncludeCategory(ConsumerProject.class)
@SuiteClasses( { ....}) 
public class ConsumerProjectSuite { }

您甚至可以将相同的测试标记为多个类别

@Category({ConsumerProject.class, OtherProject.class})
public class CommonTests {  }