我正在使用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中寻找自动事务管理。

08-28 18:02