Junit 4 执行顺序与 Junit 5
Junit 4 execution order vs Junit 5
我在使用 Junit 5 时发现一些不需要的行为。
我有以下结构:
website
config
BaseTest.java
tests
package a
Test 1
Test 2
package b
Test 3
Test 4
BaseTest
包含一个带有一些一次性设置的 @BeforeAll
和一个 @BeforeEach
和 @AfterEach
在每次测试前后设置和拆卸一些数据。
每个测试都从 BaseTest
.
延伸
我对Junit 4的习惯是BaseTest
中的@BeforeAll
在一次执行所有包中的所有测试时只运行一次。但是,对于 Junit 5,当来自另一个包的测试为 运行 时,似乎会重复 @BeforeAll
。为了澄清,我得到这样的东西:
BeforeAll
BeforeEach
Package 1 Test 1
AfterEach
BeforeEach
Package 1 Test 2
AfterEach
AfterAll
BeforeAll
BeforeEach
Package 2 Test 1
AfterEach
BeforeEach
Package 2 Test 2
AfterEach
AfterAll
提前致谢!
问候
The way I am used to with Junit 4 is that the @BeforeAll
in BaseTest
is only run once when executing all the tests in all the packages at
once.
这是不正确的。
我使用 JUnit 4 注释重新创建了您的示例,结果如下:
BeforeClass
Before
Package 1 Test 1
After
Before
Package 1 Test 2
After
AfterClass
BeforeClass
Before
Package 2 Test 1
After
Before
Package 2 Test 2
After
AfterClass
因此,所讨论的行为在 JUnit 4 和 JUnit Jupiter 中是相同的。
我设法通过覆盖 BeforeAllCallback
并将其注册到我的 BaseTest
来修复它,如下所示:
JunitExtensions.class
import com.codeborne.selenide.Configuration;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
public class JunitExtensions implements BeforeAllCallback {
@Override
public void beforeAll(ExtensionContext extensionContext) throws Exception {
//Code that needs to be ran before all tests goes here
}
}
Basetest.java
@ExtendWith(JunitExtensions.class)
public class BaseTest {
//code goes here
}
}
我在使用 Junit 5 时发现一些不需要的行为。 我有以下结构:
website
config
BaseTest.java
tests
package a
Test 1
Test 2
package b
Test 3
Test 4
BaseTest
包含一个带有一些一次性设置的 @BeforeAll
和一个 @BeforeEach
和 @AfterEach
在每次测试前后设置和拆卸一些数据。
每个测试都从 BaseTest
.
我对Junit 4的习惯是BaseTest
中的@BeforeAll
在一次执行所有包中的所有测试时只运行一次。但是,对于 Junit 5,当来自另一个包的测试为 运行 时,似乎会重复 @BeforeAll
。为了澄清,我得到这样的东西:
BeforeAll
BeforeEach
Package 1 Test 1
AfterEach
BeforeEach
Package 1 Test 2
AfterEach
AfterAll
BeforeAll
BeforeEach
Package 2 Test 1
AfterEach
BeforeEach
Package 2 Test 2
AfterEach
AfterAll
提前致谢! 问候
The way I am used to with Junit 4 is that the
@BeforeAll
inBaseTest
is only run once when executing all the tests in all the packages at once.
这是不正确的。
我使用 JUnit 4 注释重新创建了您的示例,结果如下:
BeforeClass
Before
Package 1 Test 1
After
Before
Package 1 Test 2
After
AfterClass
BeforeClass
Before
Package 2 Test 1
After
Before
Package 2 Test 2
After
AfterClass
因此,所讨论的行为在 JUnit 4 和 JUnit Jupiter 中是相同的。
我设法通过覆盖 BeforeAllCallback
并将其注册到我的 BaseTest
来修复它,如下所示:
JunitExtensions.class
import com.codeborne.selenide.Configuration;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
public class JunitExtensions implements BeforeAllCallback {
@Override
public void beforeAll(ExtensionContext extensionContext) throws Exception {
//Code that needs to be ran before all tests goes here
}
}
Basetest.java
@ExtendWith(JunitExtensions.class)
public class BaseTest {
//code goes here
}
}