2016-03-16 37 views
0

我学习写单元测试对于具有ManangedBeans和会话Bean我的JSF项目如何与会话Bean的Mockito单元测试

我从的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"); 
    } 
} 

} 

调用EJB的问题在我的测试代码,我有以下

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

} 

我的表只有一个记录PK = 1,国家=测试

上述测试代码永远不会检查会话bean,它只是把

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

而对于infoCountrySave()& warnCountrySave(),它只是从来没有检查数据库所提供的价值。

因为我从来没有使用任何单元测试较早,所以我真的不知道我在做什么是正确的,而且我无法通过在google找出任何工作代码。

这将是很大的帮助,如果任何人都可以指导我一些资源可在网上,甚至让我知道什么是我需要纠正得到与EJB部分上述测试的Mockito工作。

回答

0

变化@Mock@InjectMocks

private CountryMB countryMB 

,当你得到java.lang.NullPointerException。主要是你错过注入由被称为某个类或某些依赖when