JUnit test; исключение нулевого указателя - PullRequest
0 голосов
/ 16 декабря 2011

Я сталкиваюсь с 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;
    }
  }
}

С другой стороны, сессионный компонент выглядит следующим образом;

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;
    }
}

Когда я запускаю тест, он говорит: NullPointerException.

java.lang.NullPointerException
    at edu.city.set.eia.citypress.beans.RegisUserFacade.findByEmail(RegisUserFacade.java:63)
    at edu.city.set.eia.citypress.unittest.beans.RegisUserUTest.testValidEmail(RegisUserUTest.java:16)

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

Кажется, что происходит сбой в приведенном ниже коде. EntityManager имеет значение null, и я не вижу, чтобы он был установлен на нем Junit. Я бы предложил вам использовать Ejb3Unit , если вы хотите протестировать его из контейнера или использовать встроенную стеклянную рыбку.

Query query = this.getEntityManager().createQuery("select r from RegisUser r where username=:username");
0 голосов
/ 19 декабря 2011

Похоже, что em равно нулю в

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

, если эта строка 63 (номер строки можно увидеть в Stacktrace: RegisUserFacade.java : 63)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...