Junit 单元测试持久层(JPA/EclipseLink)
我不确定在没有准备好的内存数据库的情况下,测试数据库的正确方法是什么。我有以下JUnit4的测试套件 忽略JpaManager,我只需要它,因为应用程序作为EclipseRCP运行,而不是在容器中运行,也没有使用Spring(目前),所以我无法注入EntityManager引用,必须手动处理它 因为我在一个真实的数据库上运行,所以我正在创建我要在setUp方法中测试的对象,并在测试完成后将其删除这正是我的问题:这种设置和拆卸实际上也可能是某种测试(testCustomerSaving、testCustomerDelete),但当我以特定顺序运行测试时,它们不会被隔离(保存失败时,加载也会失败,然后删除)Junit 单元测试持久层(JPA/EclipseLink),junit,Junit,我不确定在没有准备好的内存数据库的情况下,测试数据库的正确方法是什么。我有以下JUnit4的测试套件 忽略JpaManager,我只需要它,因为应用程序作为EclipseRCP运行,而不是在容器中运行,也没有使用Spring(目前),所以我无法注入EntityManager引用,必须手动处理它 因为我在一个真实的数据库上运行,所以我正在创建我要在setUp方法中测试的对象,并在测试完成后将其删除这正是我的问题:这种设置和拆卸实际上也可能是某种测试(testCustomerSaving、testC
正确的方法是什么?在
设置中开始事务
并在拆卸中回滚事务
这就是“开始和处置”中实际发生的情况。但是,由于我在存储了提交之后才进行提交,以便能够在测试中从db加载它,所以回滚并不是删除对象。也许这是一种错误的方式。如果只从JPA缓存加载项目,假设没有差异,那么测试就足够了吗?那么,您不能走捷径。在测试方法中,按照实际用例/用户故事中调用的顺序进行调用。在同一事务中查看查询中的持久数据不需要提交,只需要使用flush()强制执行插入。然后,后续选择将看到该数据,只要它们使用相同的底层连接。
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());
}
}