Java 如何使用JUnit扩展将@beforeach与@Test方法链接?
例如,我们有两个类:Java 如何使用JUnit扩展将@beforeach与@Test方法链接?,java,unit-testing,junit,automated-tests,junit5,Java,Unit Testing,Junit,Automated Tests,Junit5,例如,我们有两个类:BaseTest和Test测试扩展BaseTest BaseTest.class包含两个方法,每个方法前面都有@注释 @BeforeEach void setUp1() {} @BeforeEach void setUp2() {} @Test void test1() {} @Test void test2() {} Test.class包含两个带有@Test注释的方法 @BeforeEach void setUp1() {} @BeforeEach
BaseTest
和Test
<代码>测试扩展BaseTest
BaseTest.class
包含两个方法,每个方法前面都有@注释
@BeforeEach
void setUp1() {}
@BeforeEach
void setUp2() {}
@Test
void test1() {}
@Test
void test2() {}
Test.class
包含两个带有@Test
注释的方法
@BeforeEach
void setUp1() {}
@BeforeEach
void setUp2() {}
@Test
void test1() {}
@Test
void test2() {}
我想将@beforeach
方法与@Test
方法链接起来,这样setup1()
只会在test1()
之前运行,而setup2()
只会在test2()
之前运行
我希望使用JUnit扩展完成此任务的代码示例。这是不可能的。您还可以考虑其他一些选择:
- 将setup2()和test2()放在另一个测试类中。因为test1和test2不共享设置(“fixture”),所以它们应该在不同的类中
- 删除@beforeach注释,并在实际测试方法开始时显式调用setup方法
每个
之前的@中的操作词是每个。这些方法在每个测试之前运行,并不真正适合您所描述的用例。如果您需要如此紧密的耦合,我建议您远离JUnit注释,直接调用设置方法:
public class BaseTest {
void setUp1() {}
void setUp2() {}
}
public class Test extends BaseTest {
@Test
void test1() {
setUp1();
// test logic
}
@Test
void test2() {
setUp2();
// test logic
}
}
在JUnit5中,您有一个称为嵌套测试的新特性,它允许您拥有嵌套类,每个类在前后都有自己的类。这需要对您的类层次结构BaseTest.class
和Test.class
进行一点更改,但效果非常好:
@嵌套表示带注释的类是非静态嵌套测试
班级@BeforeAll和@AfterAll方法不能直接用于
@嵌套测试类,除非“每类”测试实例生命周期为
用过。这样的注释不会被继承
您不需要将测试设置代码仅放在每个带注释的方法之前的@beforeach
中。您可以将它放在@Test
方法中,或者(也许更好)放在从@Test
方法调用的方法中。这实际上是个好主意。只是要小心,因为嵌套测试很快就会变得混乱。