2016-03-16 10 views
0

Я учусь писать UnitTest для моего JSF-проекта, который ManangedBeans и сеансныекак модульное тестирование Mockito с Сеансными

У меня есть проблема, вызывающая EJB из теста Mockito

package Test; 

import ejb.CountrySession; 
import java.io.Serializable; 
import javax.ejb.EJB; 
import javax.inject.Named; 
import javax.faces.view.ViewScoped; 

@Named(value = "countryMB") 
@ViewScoped 
public class CountryMB implements Serializable { 

@EJB 
private CountrySession countSession; 
// 
private String countryName; 
// 
private StatusMsg msg; 

public CountryMB() { 
} 

public void setMsg(StatusMsg msg) { 
    this.msg = msg; 
} 

public void setCountSession(CountrySession countSession) { 
    this.countSession = countSession; 
} 

public String getCountryName() { 
    return countryName; 
} 

public void setCountryName(String countryName) { 
    this.countryName = countryName; 
} 

public void ajaxAll() { 

} 

public void saveCountry() { 
    if (countryName != null && !countryName.trim().isEmpty()) { 
     boolean chk = countSession.chkCountry(countryName); 
     if (!chk) { 
      chk = countSession.addCountry(countryName); 
      if (chk) { 
       msg.addInfo("Add Country", "New Country added"); 
      } else { 
       msg.addError("Add Country", "Unable to add Country"); 
      } 
     } else { 
      msg.addWarn("Add Country", "Country already exists"); 
     } 
    } else { 
     msg.addWarn("Add Country", "Required parameter not available"); 
    } 
} 

} 

сейчас в моем тестовом коде я следующий

package Test; 

import ejb.CountrySession; 
import entities.Country; 
import java.util.List; 
import javax.persistence.EntityManager; 
import javax.persistence.Query; 
import org.junit.After; 
import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 
import org.mockito.Mock; 
import org.mockito.Mockito; 
import org.mockito.MockitoAnnotations; 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 

public class CountryMBTest { 

@Mock 
private CountryMB countryMB; 
@Mock 
private StatusMsg sm; 

@Mock 
private CountrySession countSession; 

@Mock 
private EntityManager em; 

@Mock 
private Query qry; 

@Before 
public void setup() { 
    MockitoAnnotations.initMocks(this); 
    countryMB = new CountryMB(); 
    countryMB.setMsg(sm); 
    countryMB.setCountSession(countSession); 
} 

@After 
public void after() { 
    countryMB = null; 
} 

@Test 
public void infoCountrySave() { 
    countryMB.setCountryName("Test"); 
    countryMB.saveCountry(); 
    verify(sm).addInfo("Add Country", "New Country added"); 
} 

@Test 
public void errorCountrySave() { 
    countryMB.setCountryName("Test"); 
    countryMB.saveCountry(); 
    verify(sm).addError("Add Country", "Unable to add Country"); 
} 

@Test 
public void warnCountrySave() { 
    countryMB.setCountryName("Test"); 
    countryMB.saveCountry(); 
    verify(sm).addWarn("Add Country", "Country already exists"); 
} 

@Test 
public void chkCountSave() { 
    List<Country> countLst = null; 
    Country dum = mock(Country.class); 
    EntityManager em = mock(EntityManager.class); 
    Mockito.when(em.find(Country.class, 111)).thenReturn(dum); 
    CountrySession cs = Mockito.mock(CountrySession.class); 
    Mockito.when(cs.chkCountry("Test")).thenCallRealMethod(); 
    Mockito.when(cs.getEm()).thenReturn(em); 
    String name = "Test"; 
    Assert.assertNull(cs.chkCountry(name)); 
} 

} 

Моя таблица имеет только один запись рк = 1, Страна = Test

выше тестовый код никогда не проверяет сессионных компонентов, он просто бросить

java.lang.NullPointerException 
at ejb.CountrySession.chkCountry(CountrySession.java:67) 
at Test.CountryMBTest.chkCountSave(CountryMBTest.java:112) 

И infoCountrySave() & warnCountrySave() он просто не проверить полученное значение в базе данных.

Как я никогда раньше не использовал какой-либо UnitTest, поэтому я действительно не знаю, правильно ли я выполняю то, что я делаю, более того, я не мог найти какой-либо рабочий код при помощи googling.

Это будет очень полезно, если кто-нибудь может направить меня к некоторому ресурсу, доступному в Интернете, или даже сообщить мне, что мне нужно исправить, чтобы получить вышеупомянутую работу по тестированию mockito с частью ejb.

ответ

0

Изменение @Mock с @InjectMocks для

private CountryMB countryMB 

и когда вы получаете java.lang.NullPointerException. В основном вы пропускаете какой-либо класс или некоторую зависимость от по умолчанию when

 Смежные вопросы

  • Нет связанных вопросов^_^