我正在尝试使用 TestNG 编写单元测试以将测试数据保存到数据库。我正在使用 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 为空。因此,其余数据会发生 NPE 异常。为什么 PersistenceUtil 没有在 try-with-resources 块中再次初始化。反正有没有达到同样的效果?