2013-01-08 122 views
0

我想模擬一個DAO方法在Spring/Hibernate中需要一個對象並返回一個對象。mockito方法傳遞對象時

Mockito.when(mockedDao.findByProperty(c)).thenReturn(state); 

c對象具有「名稱」,「本」等鍵值對。對象會有就業狀態。

但是當我運行測試時,它返回null。我認爲它是因爲我在單元測試中通過的參數criteria並不完全相同,儘管它們是相同的。我該如何解決這個問題?這裏的標準是不相關的休眠條件鍵值的對象...

這裏是「service.getELementByName」:

@Override 
@Transactional 
public State getElementByName(Object value) { 
    Criteria c = new Criteria(); 
    c.property = "state_name"; 
    c.value = (String) value; 
    State result = (State) stateDAO.findByProperty(c); 
    return result; 
} 

請建議! 感謝


編輯 代碼看起來是這樣的

private State state; 

@Mock 
private StateDAO mockedDao; 
@InjectMocks 
private StateServiceImpl service; 

@Before 
public void init() { 
    // mockedDao = mock(StateDAO.class); 
    Criteria c = new Criteria(); 
    c.property = "state_name"; 
    c.value = (String) "Virginia"; 
    state = new State(); 
    state.setId(20); 
    state.setIntPtLat(37.5222512); 
    state.setIntPtLon(-78.6681938); 
    state.setStateName("Virginia"); 
    Mockito.when(mockedDao.findByProperty(eq(c))).thenReturn(state); 
    // service = new StateServiceImpl<State>(); 
} 

@Test 
public void testFindByProperty() { 

    state = new State(); 
    state.setId(20); 
    state.setIntPtLat(37.5222512); 
    state.setIntPtLon(-78.6681938); 
    state.setStateName("Virginia"); 

    Criteria c = new Criteria(); 
    c.property = "state_name"; 
    c.value = (String) "Virginia"; 
    Mockito.when(mockedDao.findByProperty(eq(c))).thenReturn(state); 
    service.getElementByName("Virginia"); 
    State result = (State) service.getElementByName("Tes"); 
    assertEquals(state, result); 
} 
+1

需要更多代碼。什麼是「聯繫」對象?另外,如果可以的話,你應該檢查你以前的問題並接受一些答案。 – Paolo

+2

更多的代碼肯定會有幫助! – Jonathan

+0

其標準...我更新了代碼 –

回答

2

你是否在調用Mockito.initMocks(this)?如果不是,那可能是你的問題。

+1

您正確地添加此..MockitoAnnotations.initMocks(this);和Mockito.when(mockedDao.findByProperty(any(Criteria.class)))。然後返回(狀態);解決了這個問題。謝謝!! –

3

如果你需要的基礎上Criteria特定情況下被傳遞到findByProperty添加行爲,那麼你需要去的,爲什麼底部Mockito不認爲它是相同的 - 直到更多的代碼發佈,我們不能幫助!

然而,如果不是這種情況和任何情況下都會做,那麼你可以使用參數匹配放鬆事情有點,例如:

Mockito.when(mockedDao.findByProperty(any(Criteria.class))).thenReturn(state); 

就像我說的,這取決於你在做什麼雖然測試。

我希望有幫助。