我有一些代码,需要之前和我的测试类之后运行。无论中间运行多少个测试类,它都必须为整个集合运行一次且仅运行一次。检测是否JUnit测试类是在一套房运行或单独
当我在一套房上运行,它被称为在开始和整个套件的结束,这是按预期工作,但是,我希望能够运行一个测试类。在这种情况下,测试类需要检测到它正在单独运行并启动前/后测试代码。
这可能吗?
我有一些代码,需要之前和我的测试类之后运行。无论中间运行多少个测试类,它都必须为整个集合运行一次且仅运行一次。检测是否JUnit测试类是在一套房运行或单独
当我在一套房上运行,它被称为在开始和整个套件的结束,这是按预期工作,但是,我希望能够运行一个测试类。在这种情况下,测试类需要检测到它正在单独运行并启动前/后测试代码。
这可能吗?
你总是可以通过具有代码实现这个检测,如果它已经运行,通过静态字段或其他方法,并跳过重新运行。然后,在每个测试的@BeforeClass
中无条件地调用它。
调用代码现在变成了先决条件,每个测试的一部分,自定义代码为此承担责任,只有当运行必要的。
你可能会考虑其他方法,以避免在首位的问题:要么降低对环境的依赖关系进行了检测,或使自然的代码幂等。
我解决了这个问题是这样的: 在我加入这个套件:
public static Boolean suiteRunning = false;
@ClassRule
public static ExternalResource triggerSuiteRunning = new ExternalResource() {
@Override
protected void before() throws Throwable {
suiteRunning = true;
}
};
现在,在测试中,与MySuite.suiteRunning,我知道套件运行与否。
在你的测试中,你如何访问suiteRunning变量?你需要明确声明套件的名称吗? –
是的,我做过了。我认为测试总是属于一个套件,并且我可以静态地访问它。 但最终我们决定使用TestNG。这对定义测试套件有更多的可配置性。 –
的[之前和在JUnit 4.x的套件执行钩后](http://stackoverflow.com/questions/82949/before-and-after-suite-execution-hook-in-junit-4-可能重复x) – kan