JUnitの@BeforeClass
アノテーションは、すべての@Test
メソッド。ただし、これは依存性注入では使用できません。
データベースをクリーンアップしたい@Autowire
JUnitテストを実行する前に、Spring Bootで1回。私はできない @Autowire
静的フィールドなので、回避策を考える必要があります。何か案は?
@Before
(@BeforeClass
の代わり)(またはBeforeTransaction
(データベースの初期化方法に応じて)を使用してください)。この注釈は、非静的パブリックメソッドに添付する必要があります。
もちろん:@Before
各テストケースメソッドの前に実行します(一度だけ実行する@BeforeClass
とは異なります)。しかし、一度だけ実行したい場合は、静的マーカーフィールドを使用します。
private static boolean initialized = false;
...
@Before
public void initializeDB() {
if (!initialized) {
... //your db initialization
initialized = true;
}
}
---
DBUnit ライブラリをご覧ください。これは、説明しているアクションを実行するように設計されています。データベースインスタンスを作成および破棄でき、これを行う簡単な方法を提供します。
_JUnit5
_: テスト実行順序 および@TestInstance(Lifecycle.PER_CLASS)
Kotlinの例:
_@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 = ""
}
}
_
受け入れられた答えは賢明ですが、ハッキーなようです。通常のコンストラクタを使用してみましたか?
public class MyJUnitTest {
public MyJUnitTest() {
// code for initializeDB
}
// Tests
}
この解決策を試してください: https://stackoverflow.com/a/46274919/907576 :
@BeforeAllMethods
/@AfterAllMethods
アノテーションを使用すると、注入されたすべての値が使用可能なインスタンスコンテキストでTestクラスの任意のメソッドを実行できます。