是否可以参数化@BeforeEach,即根据每个@Test给定的参数调用不同的@BeforeEach



我正试图编写一个需要使用特定设置的测试类。当只有1个设置时,使用@BeforeEach:很容易

@BeforeEach public void setup() {
// my setup code
}
@Test public void test1() {
// ...
}
@Test public void test2() {
// ...
}
@Test public void test3() {
// ...
}

但是,当有几个设置可供选择时,我该怎么办?当然,我可以完全忘记@BeforeEach,并要求同事调用他们想要使用的设置方法:

@Test public void test1() {
setupA();
// ...
}
@Test public void test2() {
setupB();
// ...
}
@Test public void test3() {
setupB();
// ...
}

但这不再强制使用我的一种设置方法。有没有办法实现"参数化@BeforeEach"?类似(虚构的语法(:

enum SetupType {A, B, C};
@BeforeEach public void setup(SetupType setupType) {
switch (setupType) {
case A:
setupA();
break;
case B:
setupB();
break;
case C:
setupC();
break;
default:
fail("Unrecognized setup.");
}
@Test
@BeforeEachParameter(SetupType.A)
public void test1() {
// ...
}
@Test
@BeforeEachParameter(SetupType.B)
public void test2() {
// ...
}
@Test
@BeforeEachParameter(SetupType.B)
public void test3() {
// ...
}

或者更好的是,将其烘焙到@Test注释中?

@TestWithSetupA public void test1() {
// ...
}
@TestWithSetupB public void test2() {
public void test2() {
// ...
}
@TestWithSetupB public void test3() {
public void test3() {
// ...
}

是的,它确实非常简单。您可以使用测试注释Tags,并在每次设置之前注入TestInfo对象,但您需要JUnit5。

这是一个正在工作的JUnit

public class TestBeforeEach {
@BeforeEach
public void setUp(TestInfo testInfo) {
System.out.println(testInfo.getTags());
}
@Test
@Tag( "setup1" )
public void test1() {
}
@Test
@Tag( "setup2" )
public void test2() {
}

希望这能有所帮助。干杯

相关内容

  • 没有找到相关文章

最新更新