EJB3Unit save-function并没有真正保存我的实体

时间:2010-02-11 16:50:04

标签: java unit-testing ejb-3.0 testing

我正在使用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

2 个答案:

答案 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中查找自动事务管理。