我需要知道包含当前运行的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
答案 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 { }