TestNG を使用して単体テストを作成し、テスト データを db に保存しようとしています。以下のように、テストデータを作成するために DataProvider を使用しています。
@DataProvider
private Object[][] movieTitles() {
return new Object[][] {
new String[] { "Golden Eye" },
new String[] { "Troy" }, new String[] { "Gladiator" },
new String[] { "Ring" }, new String[] { "The Village" } };
}
そして、私のテストケースは、以下のように try-with-resources を使用しています:
@Test(dataProvider = "movieTitles")
public void save(String title) {
EntityTransaction tx = null;
try(PersistenceUtil util = PersistenceUtil.getUtil()){
Movie movie = new Movie(title);
EntityManager em = util.getManager();
tx = util.getTransaction();
tx.begin();
em.persist(movie);
tx.commit();
Assert.assertTrue(movie.getId() > 0);
} catch (Exception e) {
if(tx.isActive())
tx.rollback();
e.fillInStackTrace();
return;
}
}
最初のデータは正常に保存されました。ただし、try ブロックの PersistenceUtil は再度作成/初期化されないため、EntityTransaction は null になります。したがって、残りのデータに対して NPE 例外が発生します。try-with-resources ブロックで PersistenceUtil が再度初期化されないのはなぜですか。とにかく同じことを達成することはありますか?