如何使用junit扩展将@beforeach与@test方法链接起来?

ldfqzlk8  于 2021-06-29  发布在  Java
关注(0)|答案(4)|浏览(478)

例如,我们有两个类: BaseTest 以及 Test , Test 延伸 BaseTest . BaseTest.class 包含2个方法 @BeforeEach 注解。

@BeforeEach
  void setUp1() {}

@BeforeEach
  void setUp2() {}
``` `Test.class` 包含2个方法 `@Test` 注解。

@Test
void test1() {}

@Test
void test2() {}

我想把 `@BeforeEach` 方法 `@Test` 方法,所以 `setup1()` 只会在 `test1()` 以及 `setup2()` -只在之前 `test2()` .
如果能提供一个使用junit扩展完成此任务的代码示例,我将不胜感激。
dsf9zpds

dsf9zpds1#

最重要的一句话 @BeforeEach 每个都是。这些方法在每次测试之前运行,并不适合您描述的用例。如果您需要如此紧密的耦合,我建议您远离junit注解,直接调用setup方法:

public class BaseTest {
    void setUp1() {}

    void setUp2() {}
}

public class Test extends BaseTest {
    @Test
    void test1() {
        setUp1();
        // test logic
    }

    @Test
    void test2() {
        setUp2();
        // test logic
    }
}
mznpcxlj

mznpcxlj2#

您不需要将测试设置代码只放在 @BeforeEach 带注解的方法。你可以把它放在 @Test 方法或(也许更好)在从 @Test 方法。

owfi6suc

owfi6suc3#

在JUnit5中,您有一个新特性叫做嵌套测试,它允许您有嵌套类,每个类都有自己的前后。这需要对类层次结构进行一点更改 BaseTest.class 以及 Test.class 但就像一个魔咒:
@嵌套表示带注解的类是非静态嵌套测试类@beforeall和@afterall方法不能直接在@nested测试类中使用,除非使用“每类”测试示例生命周期。这样的注解不会被继承。

mhd8tkvw

mhd8tkvw4#

像这样是不可能的。您还可以考虑其他一些选择:
将setup2()和test2()放在另一个测试类中。因为test1和test2不共享设置(“fixture”),所以它们应该在不同的类中。
删除@beforeach注解,并在实际测试方法的开头显式调用setup方法。

相关问题