从junit调用EJB方法时获取空指针异常

从junit调用EJB方法时获取空指针异常,junit,ejb,Junit,Ejb,我正在为实体JavaBean编写单元Junit测试用例 UserServiceTest.java @PersistenceContext(unitName = "PU") private EntityManager em; private static UserService userService; @Test public void registerUser() { userService = new UserService();

我正在为实体JavaBean编写单元Junit测试用例

UserServiceTest.java

@PersistenceContext(unitName = "PU")
    private EntityManager em;    

    private static UserService userService;


    @Test
    public void registerUser() {
        userService = new UserService();
        resultData = userService.registerUser(name, email, password, mobileNumber, countryId);
        Assert.assertEquals(true, resultData.isSet);
        Assert.assertEquals(message, resultData.message);

    }
UserService.java

@PersistenceContext(unitName = "PU")
    private EntityManager em;
public ResultData registerUser(String name, String email, String password, String mobileNumber, String countryId) {    

        try {   

            Query q = em.createNamedQuery("User.findByEmail", User.class).setParameter("email", email);
            users = q.getResultList();
            if (!users.isEmpty()) {
                userDataClass.isSet = false;
                userDataClass.message = "A user with this email already exists.";

                return userDataClass;
            }catch (Exception e) {
            userDataClass.isSet = false;

        }
上面的代码是我调试的。当庞特来到实体经理那里

Query q = em.createNamedQuery("User.findByEmail", User.class).setParameter("email", email);
我得到一个空指针异常


在您的单元测试中,没有EJB容器可以注入任何内容,并且在构建服务时,您没有向服务传递任何EntityManager。很明显,entityManager是空的。您必须明确地创建EntityManager,就像在JavaSE应用程序中一样,并将其传递给您的服务。或者使用像Arquillian这样的测试框架;ctx=ejbContainer.getContext;但是,我得到了一个javax.ejb.EJBException:部署ejb模块失败