我的設置是這樣的。如何在使用JPA和JUnit測試時始終擦除內存數據庫中的H2
H2在內存數據庫連接到使用JPA的持久性上下文使用Spring進行配置。數據庫設置腳本由Flyway運行以生成我的表格並添加數據。
數據庫網址:JDBC:H2:MEM:TEST_DATA
在我們的JUnit測試我們的安裝和拆卸方法是這樣
@Override
protected void setUp() throws Exception {
this.context = new ClassPathXmlApplicationContext("classpath:/DataContext.xml");
this.data = this.context.getBean(DataProvider.class);
}
@Override
protected void tearDown() throws Exception {
this.context.close();
this.context = null;
this.data = null;
}
在這裏的意圖是每個JUnit測試得到它自己的數據基地,這似乎有時工作,但似乎有些時候,看起來像我得到的數據庫與以前的測試相同。一個例子是,我有2個試驗:
public void testGetFoos()
{
Collection<Foo> foos= data.getFoos();
assertEquals(NUMBER_OF_FOOS,foos.size());
}
public void testSaveFoos()
{
Foo bar = makeDummyFoo();
data.saveFoo(bar);
Collection<Foo > foos = data.getFoos();
assertEquals(NUMBER_OF_FOOS + 1,foos.size());
}
這些方法應該能夠以任意順序運行,並且運行似乎是這樣的Maven構建的時候,他們能夠在不影響彼此獨立運行,然而,偶爾在eclipse中單獨運行JUnit測試類時,save方法將首先運行,然後get方法將運行並得到錯誤的計數,因爲它似乎在mem數據庫中與以前的測試方法相同。
所以我的問題是如何殺死我的內存數據庫之間的JUnit測試使用我的設置與春季H2?或者如果context.close()方法是正確的方法,可能會導致它無法正常關閉?
還有春季更緊密的集成 - https://springtestdbunit.github.io/彈簧體檢查的DbUnit / –