gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:06:03 29 4
gpt4 key购买 nike

我正在尝试编写一个需要使用特定设置的测试类。当只有 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 并在每次设置之前注入(inject) TestInfo 对象,但您需要 JUnit 5。

这是一个工作的 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() {

}

希望这对您有所帮助。干杯!

关于java - 是否可以参数化@BeforeEach,即根据每个@Test 给出的参数调用不同的@BeforeEach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58620790/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com