準備されたIn-Memory Databaseなしで、私のデータベースをテストする正しい方法がわかりません。私はJUnit4のためのTestSuiteを持っています。ユニットテストPersistenceLayer(JPA/EclipseLink)
アプリケーションはEclipse RCPとして動作し、コンテナではなく、Springも使用されていないため、JpaManagerは無視されているので、EntityManagerリファレンスを注入して手動で処理する必要がありません。私は、実際のデータベース上で実行していますので
public class CustomerJpaTest {
private Customer testCustomer;
@Before
public void setUp() throws Exception {
JpaManager.getInstance().begin();
// create a new user for testing
CustomerJpaDao dao = new CustomerJpaDao();
testCustomer = new Customer();
testCustomer.setName("Someone");
dao.persist(testCustomer);
JpaManager.getInstance().commit();
}
@After
public void tearDown() throws Exception {
// remove previously created user
CustomerJpaDao dao = new CustomerJpaDao();
dao.remove(testCustomer);
JpaManager.getInstance().commit();
JpaManager.getInstance().dispose();
}
@Test
public void testCustomerSaving() throws Exception {
// not sure yet
}
@Test
public void testCustomerLoading() throws Exception {
ICustomerDao dao = new CustomerJpaDao();
Customer customer = dao.findByName("Someone");
assertEquals("Someone", customer.getName());
}
}
、私は、セットアップの方法でテストして行われているテスト(複数可)の後にそれを削除しようと思って、私のオブジェクトを作成しています。 正確にここに私の問題があります:このsetUpとtearDownは実際には何らかのテスト(testCustomerSaving、testCustomerDelete)でもあるかもしれませんが、特定の順序でテストを実行すると、隔離されません同様に削除してから削除してください)。
これを行う正しい方法は何ですか?
これは実際に始まりで起こっていることであり、処分されます。しかし、私は実際にテストでdbからロードできるようにストアした後にコミットを行っているので、ロールバックはオブジェクトを削除していません。おそらくこれは間違った方法です。違いがないと仮定して、オブジェクトがJPAキャッシュからロードされただけであればテストで十分でしょうか? – lostiniceland
次に、コーナーをカットすることはできません。テストメソッドでは、実際のユースケース/ユーザーストーリーで発生する順序で呼び出しを行います。 –
同じトランザクション内でクエリの永続データを参照するためにコミットする必要はありません。挿入を強制的に実行するにはflush()が必要です。それ以降の選択では、同じ基本接続を使用している限り、そのデータが表示されます。 – wrschneider