将JUnit Custom @Rule应用于特定的测试方法

时间:2017-01-17 21:02:22

标签: unit-testing junit junit4 junit-rule

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

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 only for some test methods?正如本文所述
  3. 我可以以某种方式使用测试方法名称并跳过规则的执行 但是这种方法的一个缺点是,每次我在一个特定的类中使用规则时,我需要将所有这些方法名称添加到列表中以查看它们是否被找到,以确定执行其余的逻辑。

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

1 个答案:

答案 0 :(得分:1)

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




  public class TestClassExample {

 @测试
 public void test_OneEqualsOne(){
 CustomRuleForOneEqualsOne customRuleForOneEqualsOne = new CustomRuleForOneEqualsOne();
 //使用customRuleForOneEqualsOne
 }

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

}