2013-07-30 62 views
2

我有一些代码,需要之前和我的测试类之后运行。无论中间运行多少个测试类,它都必须为整个集合运行一次且仅运行一次。检测是否JUnit测试类是在一套房运行或单独

当我在一套房上运行,它被称为在开始和整个套件的结束,这是按预期工作,但是,我希望能够运行一个测试类。在这种情况下,测试类需要检测到它正在单独运行并启动前/后测试代码。

这可能吗?

+1

的[之前和在JUnit 4.x的套件执行钩后](http://stackoverflow.com/questions/82949/before-and-after-suite-execution-hook-in-junit-4-可能重复x) – kan

回答

1

你总是可以通过具有代码实现这个检测,如果它已经运行,通过静态字段或其他方法,并跳过重新运行。然后,在每个测试的@BeforeClass中无条件地调用它。

调用代码现在变成了先决条件,每个测试的一部分,自定义代码为此承担责任,只有当运行必要的。

你可能会考虑其他方法,以避免在首位的问题:要么降低对环境的依赖关系进行了检测,或使自然的代码幂等。

2

我解决了这个问题是这样的: 在我加入这个套件:

public static Boolean suiteRunning = false; 
    @ClassRule 
    public static ExternalResource triggerSuiteRunning = new ExternalResource() { 
     @Override 
     protected void before() throws Throwable { 
     suiteRunning = true; 
     } 
    }; 

现在,在测试中,与MySuite.suiteRunning,我知道套件运行与否。

+0

在你的测试中,你如何访问suiteRunning变量?你需要明确声明套件的名称吗? –

+1

是的,我做过了。我认为测试总是属于一个套件,并且我可以静态地访问它。 但最终我们决定使用TestNG。这对定义测试套件有更多的可配置性。 –

相关问题