我正在使用ejb3unit session bean test对ejb3项目进行测试。上一次assertNotSame()
检查将导致以下测试失败。
public void testSave() {
Entity myEntity = new Entity();
myEntity.setName("name1");
myEntity = getBeanToTest().save(myEntity);
assertNotSame("id should be set", 0l, myEntity.getId());
// now the problem itself ...
int count = getBeanToTest().findAll().size();
assertNotSame("should find at least 1 entity", 0, count);
}
那么,发生了什么。 save(entity)方法传递带有id集的“持久”对象。但是当我尝试使用findAll()
找到对象时,它不会传递单个结果。如何让我的ServiceBean.save
方法起作用,以便找到持久化的实体?
修改
我的ServiceBean看起来像这样
@Stateless
@Local(IMyServiceBean.class)
public class MyServiceBean implements IMyServiceBean {
@PersistenceContext(unitName = "appDataBase")
private EntityManager em;
public Entity save(Entity entity) {
em.merge(entity);
}
public List<Entity> findAll() {
... uses Query to find all Entities ..
}
}
和ejb3unit的ejb3unit.properties:
ejb3unit_jndi.1.isSessionBean=false
ejb3unit_jndi.1.jndiName=project/MyServiceBean/local
ejb3unit_jndi.1.className=de.prj.MyServiceBean
答案 0 :(得分:1)
我们走了..
public void testSave() {
Entity myEntity = .. // create some valid Instance
// ...
EntityTransaction tx = this.getEntityManager().getTransaction();
try {
tx.begin();
myEntity = getBeanToTest().save(myEntity);
tx.commit();
} catch (Exception e) {
tx.rollback();
fail("saving failed");
}
// ...
}
也许这会对你们中的一些人有所帮助。
答案 1 :(得分:0)
也许您没有正在运行的交易,因此您的实体未被保存。
一种选择是通过在测试中注入@PersistenceContext
来手动启动事务,但最好在ejb3unit中查找自动事务管理。