我正在使用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
最佳答案
也许您没有正在运行的事务,因此不会保存您的实体。
一种选择是通过在测试中注入@PersistenceContext
来手动启动事务,但是更好地在ejb3unit中寻找自动事务管理。