检测Junit测试类是在套件中运行还是单独运行

时间:2013-07-30 10:53:54

标签: junit

我有一些代码需要在我的测试类之前和之后运行。在中间运行多少个测试类并不重要,它必须为整个集合运行一次且仅运行一次。

当我在套件中运行时,它在整个套件的开始和结束时调用,这是按预期工作的,但是,我希望能够运行单个测试类。在这种情况下,测试类需要检测它是否单独运行并启动前/后测试代码。

这可能吗?

2 个答案:

答案 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中无条件地调用它。

现在调用该代码成为每个测试的前提条件的一部分,自定义代码只负责在必要时运行。

您可能会考虑其他方法来避免问题:要么减少测试的环境依赖性,要么使代码自然是幂等的。