私は多くのことをテストしているすべてのインターネットを探していますが、私のコードで動作する答えは見つかりません。スプリングテスト:DAOをテストした後にデータベースをロールバックする
私はここしばらくのをテストを実行している(または、各テストの後、私は本当に気にしない)の後に、私のデータベースをロールバックしたい
は私のコードです:何からそう
@Transactional
public class ApplicationServiceTest {
private ApplicationService applicationService;
@Test
public void testAddApplication() throws ExceptionMessage
{
Application application = applicationService.addApplication("nom", true, "domaineFonctionnel");
// [...] testing
}
//[...] @Before and @After doing things
}
public class ApplicationService{
private ApplicationDao applicationDao;
public Application addApplication(String nom, boolean autorise, String domaineFonctionnel)
{
Application application = new Application();
// [..] Initialise application with parameters
applicationDao.addApplication(application);
return application;
}
}
public class ApplicationDao extends Dao
{
private static EntityManagerFactory entityManagerFactory;
public void updateApplication(Application application) {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.merge(application);
entityManager.getTransaction().commit();
entityManager.close();
}
}
I @Transactionalはデフォルトで私のトランザクションをロールバックすべきです。しかし、それはしません。どうして?
(私はDAOとサービスする@Transactionalを追加しようとしましたが、それは何も変更されません)
にあなただけの限り、あなたは** **トランザクションをコミットしていないとして、あなたがトランザクション内でやったものは何でもロールバックすることができます。一旦あなたは'entityManager.getTransaction().commit(); 'を呼び出すとロールバックするのが遅すぎます。 @Transactionalはトランザクションをロールバックしません。 docs http://docs.oracle.com/javaee/7/api/javax/transaction/Transactional.html – XtremeBaumer
を参照してください。さて、私の好みをテストする最良の方法は何でしょうか?私のデータベースに永遠に残っていない? –
'@ Transactional'はあなたのコードに失敗した場合にだけトリガされます。ポイントは、テストで実際のデータベースを使用してはならないし、いくつかのデータセットを使用するべきである(とJailerのようないくつかのツールを使用していくつかを生成する)ので、実際のテストを実行してデータベースを使用しないでください。 – DamCx