Java JUnit试验;空指针异常

Java JUnit试验;空指针异常,java,junit,nullpointerexception,Java,Junit,Nullpointerexception,我面临一个NullPointerException。 我试图执行JUnit测试并以某种方式接收NullPointerException 我写的测试如下 package edu.city.set.eia.citypress.unittest.beans; import edu.city.set.eia.citypress.model.RegisUser; import edu.city.set.eia.citypress.beans.RegisUserFacade; import org.jun

我面临一个NullPointerException。 我试图执行JUnit测试并以某种方式接收NullPointerException

我写的测试如下

package edu.city.set.eia.citypress.unittest.beans;

import edu.city.set.eia.citypress.model.RegisUser;
import edu.city.set.eia.citypress.beans.RegisUserFacade;
import org.junit.Test;
import static org.junit.Assert.*;

public class RegisUserUTest {

  private static final String EMAIL = "test_email";
  private static final String INVALID_EMAIL = "test_email_invalid";

  @Test
  public void testValidEmail() throws Exception {
    TestEmail bean = new TestEmail();
    RegisUser user = bean.findByEmail(EMAIL);
    assertNotNull(user);
    assertEquals(EMAIL, user.getEmail());
  }

  @Test(expected = Exception.class)
  public void testInValidUser() throws Exception {
    TestEmail bean = new TestEmail();
    bean.findByEmail(INVALID_EMAIL);
  }

  private static class TestEmail extends RegisUserFacade {

    private RegisUser user;

    public TestEmail() {
      user = new RegisUser();
      user.setEmail(EMAIL);
    }

    @Override
    public RegisUser findUser(String email) {
      if (email.equals(user.getEmail())) {
        return user;
      }
      return null;
    }
  }
}
另一方面,, 会话bean如下所示

package edu.city.set.eia.citypress.beans;

import edu.city.set.eia.citypress.model.RegisUser;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;


@Stateless
public class RegisUserFacade extends AbstractFacade<RegisUser> implements RegisUserFacadeLocal {
    @PersistenceContext(unitName = "citypress_PU")
    private EntityManager em;

    @Override
    public EntityManager getEntityManager() {
        return em;
    }

    public void setEntityManager(EntityManager em) {
        this.em = em;
    }


    public RegisUserFacade() {
        super(RegisUser.class);
    }


    @Override
    public RegisUser findByUsername(String username) {
        Query query = this.getEntityManager().createQuery("select r from RegisUser r where username=:username");
        query.setParameter("username", username);
        RegisUser regisuser;
        try { 
            regisuser = (RegisUser) query.getSingleResult();
        }
        catch (Exception e){
            regisuser = null;
        }
        return regisuser;
    }

    @Override
    public RegisUser findByUserPass(String username, String password){
        Query query = this.getEntityManager().createNamedQuery("RegisUser.findByUserPass");
        query.setParameter("username", username);
        query.setParameter("password", password);
        RegisUser regisuser;

        try { // To prevent javax.persistence.NoResultException
            regisuser = (RegisUser) query.getSingleResult();
        }
        catch (Exception e){
            regisuser = null;
        }

        return regisuser;
    }

    @Override
    public RegisUser findByEmail(String email) {
        Query query = em.createQuery("select r from RegisUser r where r.email = :email");
        query.setParameter("email", email);
        RegisUser regisuser;
        try { 
            regisuser = (RegisUser) query.getSingleResult();
        }
        catch (Exception e){
            regisuser = null;
        }
        return regisuser;
    }
}
似乎em在中是空的

Query query = em.createQuery("select r from RegisUser r where r.email = :email");

如果此行为63,则可以在Stacktrace:regiuserfacade.java:63中看到行号,它似乎在下面的代码处失败。EntityManager为null,我看不到Junit对其进行设置。我建议你使用,如果你想测试它的容器外或使用嵌入式玻璃鱼

Query query = this.getEntityManager().createQuery("select r from RegisUser r where username=:username");

学习使用调试器。
Query query = this.getEntityManager().createQuery("select r from RegisUser r where username=:username");