Kin*_*ere 18 junit spring unit-testing dependency-injection spring-boot
@BeforeClass如果要在所有@Test方法之前运行一次,JUnit的注释必须声明为static .但是,这不能用于依赖注入.
@Autowire在运行JUnit测试之前,我想用Spring Boot 清理一个数据库.我不能@Autowire静态字段所以我需要考虑一个解决方法.有任何想法吗?
Ral*_*lph 32
只需使用@Before(而不是@BeforeClass)(或BeforeTransaction(取决于您如何初始化数据库)).此注释必须附加到非静态公共方法.
当然: @Before在每个测试用例方法之前运行(不像@BeforeClass只运行一次.)但是如果你想要只运行一次,那么使用静态标记字段.
private static boolean initialized = false;
...
@Before
public void initializeDB() {
if (!initialized) {
... //your db initialization
initialized = true;
}
}
---
Run Code Online (Sandbox Code Playgroud)
对于JUnit5: 测试执行订单和@TestInstance(Lifecycle.PER_CLASS)
科特林示例:
@ExtendWith(SpringExtension::class)
@TestInstance(PER_CLASS)
class BeforeInstanceTests {
private var initialized: String = ""
private val callList: MutableList<String> = ArrayList()
@BeforeAll
fun beforeAllNonStatic() {
initialized = "initialized"
assertEquals(0, callList.size)
}
@Test
fun test1() {
assertEquals("initialized", initialized)
callList.add("test1")
}
@Test
fun test2() {
assertEquals("initialized", initialized)
callList.add("test2")
}
@Test
fun test3() {
assertEquals("initialized", initialized)
callList.add("test3")
}
@AfterAll
fun afterAllNonStatic() {
assertEquals("initialized", initialized)
assertEquals(3, callList.size)
assertTrue(callList.contains("test1"))
assertTrue(callList.contains("test2"))
assertTrue(callList.contains("test3"))
callList.clear()
initialized = ""
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16687 次 |
| 最近记录: |