我有一些代码需要在我的测试类之前和之后运行。在中间运行多少个测试类并不重要,它必须为整个集合运行一次且仅运行一次。
当我在套件中运行时,它在整个套件的开始和结束时调用,这是按预期工作的,但是,我希望能够运行单个测试类。在这种情况下,测试类需要检测它是否单独运行并启动前/后测试代码。
这可能吗?
答案 0 :(得分:7)
我用这种方式解决了这个问题:
在MySuite
我添加了这个:
public static Boolean suiteRunning = false;
@ClassRule
public static ExternalResource triggerSuiteRunning = new ExternalResource() {
@Override
protected void before() throws Throwable {
suiteRunning = true;
}
};
现在,在依赖测试中,我知道套件是否正在运行并且可以禁用测试:
@BeforeClass
public static void beforeClass() {
Assume.assumeTrue(MySuite.suiteRunning);
}
// --- or ---
@Test
public static void test() {
Assume.assumeTrue(MySuite.suiteRunning);
}
答案 1 :(得分:1)
您可以通过让代码检测它是否已经运行,通过静态字段或其他方法,并再次跳过运行来实现此目的。然后,在每个测试的@BeforeClass
中无条件地调用它。
现在调用该代码成为每个测试的前提条件的一部分,自定义代码只负责在必要时运行。
您可能会考虑其他方法来避免问题:要么减少测试的环境依赖性,要么使代码自然是幂等的。