2

我可以只为测试类中的特定测试方法运行自定义规则吗?

public class TestClassExample
{
    @Rule
    public CustomRuleForOneEqualsOne customRuleForOneEqualsOne = new CustomRuleForOneEqualsOne();

    @Test
    public void test_OneEqualsOne()
    {
        assertEquals(1, 1);
    }

    @Test
    public void test_TwoEqualsTwo()
    {
        assertEquals(2, 2);
    }
}

在上面的测试类中,我可以使用我的customRuleForOneEqualsOne规则仅用于测试方法test_OneEqualsOne而不用于test_TwoEqualsTwo.

我在 Stack Overflow 上看到过其他解决方案:

  1. 将两种测试方法移动到不同的类[说这个选项对于特定场景是不可能的](或)
  2. JUnit:@Before 仅适用于某些测试方法?如这篇文章所述

我可以以某种方式使用测试方法名称并跳过规则的执行,但这种方法的一个缺点是,每次我在特定类中为一组特定方法使用规则时,我都需要添加所有这些方法名称到一个列表中,看看它们是否被找到,以确定执行其余的逻辑。

有没有办法在测试类中为一组特定的测试方法使用自定义规则,而在同一测试类中的其他测试方法中忽略它们?

4

1 回答 1

1

据我所知,@Rule适用于所有测试。因此,如果您只需要@Rule在单个@Test方法中使用,请不要使用@Rule. 在这种情况下,您的代码将如下所示:

public class TestClassExample {

    @Test
    public void test_OneEqualsOne() {
        CustomRuleForOneEqualsOne customRuleForOneEqualsOne = new CustomRuleForOneEqualsOne();
        // use customRuleForOneEqualsOne
    }

    @Test
    public void test_TwoEqualsTwo() {
        assertEquals(2, 2);
    }

}
于 2017-01-18T07:57:11.487 回答