如果您希望它在所有@Test
方法之前運行一次,則JUnit的@BeforeClass
註釋必須聲明爲static。但是,這不能用於依賴注入。JUnit @BeforeClass非靜態解決Spring引導應用程序
我想在我運行JUnit測試之前清理一個數據庫,使用Spring Boot啓動@Autowire
。我不能@Autowire
靜態字段,所以我需要考慮工作。有任何想法嗎?
如果您希望它在所有@Test
方法之前運行一次,則JUnit的@BeforeClass
註釋必須聲明爲static。但是,這不能用於依賴注入。JUnit @BeforeClass非靜態解決Spring引導應用程序
我想在我運行JUnit測試之前清理一個數據庫,使用Spring Boot啓動@Autowire
。我不能@Autowire
靜態字段,所以我需要考慮工作。有任何想法嗎?
只需使用@Before
(而不是@BeforeClass
)(或BeforeTransaction
(取決於您如何初始化數據庫))。此註釋必須附加到非靜態公共方法。
當然:@Before
每個測試用例方法之前運行(不喜歡@BeforeClass
只運行一次)。但是,如果你想正好一次運行它,然後使用一個靜態標記字段。
private static boolean initialized = false;
...
@Before
public void initializeDB() {
if (!initialized) {
... //your db initialization
initialized = true;
}
}
---
看看DBUnit庫 - 它的目的是執行你描述的動作。它可以創建拆除數據庫實例併爲您提供簡單的方法來執行此操作。
嘗試這種解決方案: https://stackoverflow.com/a/46274919/907576:
與@BeforeAllMethods
/@AfterAllMethods
註釋,你可以在一個實例方面,所有注射值都可以執行在測試類中的任何方法。
啊好的,這很簡單,很有意義。 – Kingamere
這就是我必須使用JUnit時所要做的。但我更喜歡使用TestNG,它具有非靜態方法中的所有註釋:對於TestNG,@BeforeClass將在非靜態方法上定義,並且將在該類中的所有測試方法之前執行一次。 –