15

@Test是否可以在具有注释的方法的类中运行 JUnit方法,但仅在此测试@Before中忽略该方法?@Before

编辑:如果 JUnit 支持此功能而不是解决方法,我很感兴趣。我知道一些解决方法,例如在另一个类中移动测试或删除注释并手动调用setUp()每个测试方法。

假设一个类中有 30 个测试,其中 29 个@Before确实简化了测试初始化​​,但其中一个(或多个)是无用的/它使事情复杂化。

public class MyTestClass {

    @Before
    public void setUp() {
        //setup logic
    }

    @Test
    public void test1() {
        //[...]
    }

    @Test
    public void test2() {
        //[...]
    }

    //more tests here

    @Test(ignoreBefore = true, ignoreAfter = true //false by default)
    //something equivalent to this
    public void test20() {
        //[...]
    }

}
4

4 回答 4

5

您可以使用 TestRule 执行此操作。请参阅我对Exclude individual test from 'before' method in JUnit 的回答。基本上,实现ExternalResource,在 apply 方法中,检查方法上是否有特定的注解,如果有,不要运行 before/after 方法。不过,您必须从您的规则中专门调用之前/之后。

于 2012-12-14T13:41:18.910 回答
3

如果它没用,那应该不是问题 - 再次运行设置是否有害?

但是,我认为这是不可能的,并且将我视为残废功能。

另一种方法 - 将该测试移至单独的测试类。

于 2012-12-14T12:13:49.593 回答
1

使用 JUnit 5,您可以使用 @Nested 注释进行嵌套测试:

public class MainClass {
 @Nested
  class InnerClass1 {

  @BeforeEach 
  void setup(){}

  @Test 
  void test1(){}
 }

 @Nested
  class InnerClass2 {
  // No setup

  @Test 
  void test2(){}
 }
} 
于 2019-03-15T16:02:15.137 回答
0

除此之外,我在最近访问该地区时发现了一些东西。

Junit/Mockito 似乎优先考虑在测试中定义的模拟行为,而不是 @Before 注释方法。

于 2020-10-12T07:35:06.150 回答