- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 JUnit 5 时遇到以下问题。我想运行 15 次测试,所以我使用了注释 @RepeatedTest(15)
并且它起作用了。但问题是,在每次运行中,它都会调用 @BeforeEach
方法和 @AfterEach
方法。
它对所有 15 个循环都这样做,但它应该只在第一次运行之前调用 @BeforeEach
,在最后一次运行之后调用 @AfterEach
。我想我不能使用 @BeforeAll
和 @AfterAll
因为我有多个测试,所以这只会在测试 1 和测试 50 之前被调用。
@BeforeAll Method
Test 1:
- @BeforeEach Method
- Run1
- @AfterEach Method
- @BeforeEach Method
- Run2
- @AfterEach Method
Test 2:
- @BeforeEach Method
- Run1
- @AfterEach Method
- @BeforeEach Method
- Run2
- @AfterEach Method
@AfterAll Method
@BeforeAll Method
Test 1:
- @BeforeEach Method
- Run1
- Run2
- @AfterEach Method
Test 2:
- @BeforeEach Method
- Run1
- Run2
- @AfterEach Method
@AfterAll Method
最佳答案
我在这里看到四个选项:
为每个场景创建一个新的测试类,每个场景都有一个@RepeatedTest
方法,并使用@BeforeAll
和@AfterAll
进行测量。
不要使用 @RepeatedTest
,而是在普通的 @Test
中进行重复和测量。
让 JUnit 在需要决定执行的地方注入(inject) RepetitionInfo
:
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
import org.junit.jupiter.api.TestInfo;
class RepeatTest {
@BeforeEach
void setUp(RepetitionInfo repetitionInfo, TestInfo testInfo) {
if (repetitionInfo.getCurrentRepetition() == 1) {
System.out.println("Before repetition of " + testInfo.getDisplayName());
}
}
@RepeatedTest(value = 3, name = "{displayName}_{currentRepetition}of{totalRepetitions}") @DisplayName("test1")
void test1(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
}
@RepeatedTest(value = 5, name = "{displayName}_{currentRepetition}of{totalRepetitions}") @DisplayName("test2")
void test2(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
}
@AfterEach
void tearDown(RepetitionInfo repetitionInfo, TestInfo testInfo) {
if (repetitionInfo.getCurrentRepetition() == repetitionInfo.getTotalRepetitions()) {
System.out.println("After repetition of " + testInfo.getDisplayName());
}
}
}
输出:
Before repetition of test1_1of3
test1_1of3
test1_2of3
test1_3of3
After repetition of test1_3of3
Before repetition of test2_1of5
test2_1of5
test2_2of5
test2_3of5
test2_4of5
test2_5of5
After repetition of test2_5of5
如果您有很多这样的测试,请考虑实现一个小型 JUnit 扩展。也许引入一些新的方法注释。
关于java - 如何避免 '@RepeatedTest Annotation runs BeforeEach and AfterEach in JUnit' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58454348/
例如,我们有 @RepeatedTest : import org.junit.jupiter.api.RepeatedTest; import static org.junit.jupiter.ap
我读过 following article我知道我可以通过添加以下注释来要求 junit 多次执行测试: @RepeatedTest(value = 3, name = RepeatedTest.LO
我有一个测试用例,其中我以枚举的形式提供了测试数据。喜欢 enum TestTransactions { TestTransactions(Transaction T1, Transactio
目前,我正在(尝试)将现有的 Junit4 项目迁移到 Junit5。 我被困在必须同时使用@RepeatedTest 和@ParameterizedTest 的地方。尝试这样做会引发默认异常 - N
我在使用 JUnit 5 时遇到以下问题。我想运行 15 次测试,所以我使用了注释 @RepeatedTest(15) 并且它起作用了。但问题是,在每次运行中,它都会调用 @BeforeEach 方法
我是一名优秀的程序员,十分优秀!