私のセットアップは次のようなものです。JPAとJUnitテストを使用しているときにメモリデータベースのH2を一貫して消去する方法
JPAを使用してメモリデータベースに接続されているH2は、Springを使用して永続コンテキストが設定されています。データベースのセットアップスクリプトはFlywayによって実行され、テーブルを生成してデータを追加します。
データベースURL:JDBC:H2:MEM:各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テストでTEST_DATA
ですこれは時々動作するようですが、前のテストと同じデータベースを取得しているように見えることがあります。 、これらの方法は、任意の順序で実行することができるはずとケースのように見えるMavenのビルドを実行しているとき、彼らはお互いに影響を与えずに独立して実行することができます
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());
}
:例では、私は2つのテストを持っているということですただし、JUnitテストクラスをeclipseから個別に実行すると、saveメソッドが最初に実行され、getメソッドが実行され、前のテストメソッドと同じようにmemデータベースに入っているように見えるため、誤カウントを取得することがあります。
私の質問は、SpringでセットアップしたJUnitテストの間にメモリデータベース内のH2をどのようにして削除するのですか? context.close()メソッドが正しい方法であれば、何が正しくシャットダウンされない可能性がありますか?
春のためのより緊密な統合もあります - https://springtestdbunit.github.io/は、 spring-test-dbunit / –