我来自 Spring 阵营,我不想使用 Spring,并且正在迁移到 JavaEE6,但是我在测试 DAO + JPA 时遇到了问题,这是我的简化示例:
public interface PersonDao
{
public Person get(long id);
}
这是一个很基础的DAO,因为我是Spring出来的,相信DAO还是有它的价值的,所以决定加一个DAO层。
public class PersonDaoImpl implements PersonDao , Serializable
{
@PersistenceContext(unitName = "test", type = PersistenceContextType.EXTENDED)
EntityManager entityManager ;
public PersonDaoImpl()
{
}
@Override
public Person get(long id)
{
return entityManager .find(Person.class , id);
}
}
这是一个 JPA 实现的 DAO,我希望 EE 容器或测试容器能够注入 EntityManager(就像 Spring 一样)。
public class PersonDaoImplTest extends TestCase
{
@Inject
protected PersonDao personDao;
@Override
protected void setUp() throws Exception
{
//personDao = new PersonDaoImpl();
}
public void testGet()
{
System.out.println("personDao = " + personDao); // NULL !
Person p = personDao.get(1L);
System.out.println("p = " + p);
}
}
这是我的测试文件。
好的,问题来了:因为JUnit不理解@javax.inject.Inject,PersonDao将无法注入,测试将失败。
如何找到能够将 EntityManager 注入 PersonDaoImpl 并将 PersonDaoImpl 注入到 TestCase 的 PersonDao 的测试框架?
我试过 unitils.org ,但找不到这样的样本,它只是直接将 EntityManagerFactory 注入 TestCast ,而不是我想要的......