![](/img/trans.png)
[英]How to do a custom database setup/teardown in Spring Test Dbunit?
[英]How to setup/teardown dbunit dataset without using static @BeforeClass
我正在嘗試使用dbunit來測試系統的數據庫。 由於可以使用同一數據集測試多個測試用例,因此我想為所有這些實例初始化一次數據集。 但是我也使用spring的@AutoWire來初始化那些數據庫連接參數。
我嘗試使用@BeforeClass和@AfterClass設置數據庫。 但是事實證明@Autowire在類被初始化時發生(對於自動連線靜態成員似乎不起作用)。
所以想知道是否還有其他方法可以在所有測試用例之前/之后設置/刪除數據庫數據集?
我找到了一個優雅的解決方案:
如何允許實例方法作為JUnit BeforeClass行為運行
這篇文章基本上解釋了一種更改單元測試運行程序以觸發事件的方法。 對於春季,也可以使用AbstractTestExecutionListener
只需使用ApplicationListener接口初始化數據庫。 請看一下這個問題: 如何向應用程序上下文初始化事件添加一個鈎子? 可以在onApplicationEvent方法中創建所有數據。
無論如何,不要使用dbunit,只需使用ClassMode = AfterEachTestMethod使用@Transactional和@DirtiesContext (在類級別為DirtiesContext )創建所有測試,那么代碼如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:testContext.xml" })
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class YourTestClassTest {
//...
}
我還使用DBUnit進行集成測試,並設置/拆卸@Before和@After注釋方法中的數據,而不是@ BeforeClass / @ AfterClass。 因此每個測試都會獲取其刷新的測試數據。
要為每個測試使用不同的數據集或為單個測試使用不同的替換,您還可以將setup(dataSet)或setup(replacementList)方法作為@Test注釋方法的第一行(而不是@Before注釋)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.