2016-09-16 20 views
0

我正在嘗試爲Dao類創建模擬數據。測試用例正在成功運行,但它返回空數據。我搜索並實現了@Mock,@InjectMocks,啓動MockitoAnnotation,但它仍然無法正常工作。該項目是在春天。上下文路徑也是正確的。我沒有使用任何其他方法。首先運行,我試圖調用一個方法並打印。請幫我解決這個錯誤。使用Mockito創建Mock Dao時獲得null響應

RegionManager類:

@Service("regionManager") 
public class RegionManager implements RegionManagerIntf { 

    @Autowired 
    RegionDaoIntf regionInquiry; 

    private RegionDao regionDao; 

    @Override 
    public ListPojo retrieveData(String Id, String details, String code) { 
     return regionInquiry.retrievePData(Id, details, code); 
    } 

    public RegionDao getRegionDao() { 
     return regionDao; 
    } 

    public void setRegionDao(RegionDao regionDao) { 
     this.regionDao = regionDao; 
    } 


} 

DAO類:

@Component 
public class RegionProcessorFactory implements RegionProcessorIntf { 

    private static final Logger logger = Logger 
      .getLogger(RegionProcessorFactory.class); 

    @Override 
    public ListPojo retrieveData(String Id, 
      String details, String code) { 
      ListPojo listPojo = new ListPojo(); 
      //Do some action 
      return listPojo; 
      } 
    } 

ListPojo:

It contains getter setters. 

測試類:

import static org.junit.Assert.assertEquals; 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 
import static org.mockito.Mockito.when; 

import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.InjectMocks; 
import org.mockito.Mock; 
import org.mockito.MockitoAnnotations; 
import org.mockito.runners.MockitoJUnitRunner; 
import org.springframework.test.context.ContextConfiguration; 

import com.fasterxml.jackson.databind.ObjectMapper; 

@RunWith(MockitoJUnitRunner.class) 
@ContextConfiguration({"classpath*:spring/beanRefContext.xml"}) 
public class RegionManagerTest 
{ 
    private String Id = "12345"; 
    private String Code = "123"; 
    private String details = "12"; 

    ObjectMapper mapper; 

    @Mock 
    private RegionProcessorFactory dao; 

    @Mock 
    private ListPojo listPojo; 

    @InjectMocks 
    private RegionManager service; 

    /** 
    * Before method will be called before executing every test case 
    */ 
    @Before 
    public void initialize() { 
     System.out.println("In initialize"); 
     MockitoAnnotations.initMocks(this); 
     dao = mock(RegionProcessorFactory.class); 
     listPojo = mock(ListPojo.class); 

     service = new RegionManager(); 
     service.setRegionDao(dao); 
    } 

    @Test 
    public void CreateDatabaseMock() throws Exception 
    { 
     System.out.println("dao result :: "+dao.retrieveData(Id, "", "")); 

     when(dao.retrieveData(Id, "", "")).thenReturn(listPojo); 

     verify(dao).retrieveData(Id, "", ""); 
    } 

    /** 
    * After method will be called after executing every test case 
    */ 
    @After 
    public void TearDownClass() { 
    } 
} 
+0

執行此Junit時遇到的錯誤是什麼?我可以在這段代碼中看到一個可能的錯誤,那就是你必須編寫service = new RegionManager();在MockitoAnnotations.initMocks(這個)之前, – Shubhi224

回答

0

第一:如果您正在使用@RunWith(MockitoJUnitRunner.class)沒有必要MockitoAnnotations.initMocks(this);更上here

二:一切與@Mock會被嘲笑和的Mockito會嘗試將其注入到與@InjectMocks標註的對象,它的Mockito將實例(舊版本的Mockito必須創建這樣下面的行並不需要自己的對象):磕碰

@Test 
public void CreateDatabaseMock() throws Exception{ 
    when(dao.retrieveData(Id, "", "")).thenReturn(listPojo); 
    System.out.println("dao result :: "+dao.retrieveData(Id, "", "")); 
    verify(dao).retrieveData(Id, "", ""); 
} 
後的實際執行應該來:

dao = mock(RegionProcessorFactory.class); 
listPojo = mock(ListPojo.class); 

service = new RegionManager(); 
service.setRegionDao(dao);