jUnit:如何过滤在多个套件中发现的测试

问题描述:

当jUnit运行包含多个“子套件”的测试套件时,是否可以过滤在不同套件中找到的测试,以使它们仅运行一次?我正在开发一个有许多数据库集成测试的项目,所以最好只运行一次,以便让它更快。使用JUnit 4.4(使用Eclipse或蚂蚁)运行MainSuitejUnit:如何过滤在多个套件中发现的测试

@RunWith(Suite.class) 
@SuiteClasses 
({ 
    TestA1.class, 
    TestA2.class, 
    //... More tests only related to ModuleA 

    SomeTestUsedByManyModules.class 
}) 
public class ModuleASuite 
{} 

@RunWith(Suite.class) 
@SuiteClasses 
({ 
    TestB1.class, 
    TestB2.class, 
    //... More tests only related to ModuleB 

    SomeTestUsedByManyModules.class 
}) 
public class ModuleBSuite 
{} 

目前运行SomeTestUsedByManyModules两次:

考虑这个 “主套件”:

@RunWith(Suite.class) 
@SuiteClasses 
({ 
    ModuleASuite.class, 
    ModuleBSuite.class, 
    // More suites... 
}) 
public class MainSuite 
{} 

而这些 “子套房”。我怎样才能让它只运行一次?我想自己制作Runner,但也许有一个更简单的解决方案呢?

+0

我从来没有听说过JUnit会记录之前是否运行测试方法 - 毕竟,也许这就是您的意图?编写自己的跑步者可能是唯一的方法。 (好吧,你可以在每个测试方法中添加代码,将自己注册到某个共享散列,这样它就可以决定是否运行。)相当丑陋。)编写测试跑步者看起来令人望而生畏,但看起来更难。 – 2011-05-17 21:08:39

我不知道如何用@RunWith(Suite)来做到这一点,但不同的方法呢? ClassPathSuite可让您提供测试名称模式,以避免需要手动将其全部列出。