2012-10-23 53 views
1

我使用的Mockito做我的DAO測試,但是當我打電話其中有一個會話的方法saveSession session = (Session) getEntityManager().getDelegate();,但sessionnull, 我不知道發生了什麼事,有人可以幫助我?會議即將null進行的Mockito測試DAO

Mockito.when(MyDAOImplMock.salvarOuEditar(object)).thenReturn(object); 
objectTest = MyDAOImpl.salvarOuEditar(object); 
Mockito.verify(MyDAOImplMock).salvarOuEditar(object); 

MyDAOImplMock是我的DAO實現的模擬,並MyDAOImpl是我的DAO實現的實例。

@Override 
@Transactional(readOnly = false, propagation = Propagation.REQUIRED) 
public T salvarOuEditar(T entidade) { 
    Session session = (Session) getEntityManager().getDelegate(); 
    session.saveOrUpdate(entidade); 
    return entidade; 
} 
+0

你似乎對你的模擬對象將要做什麼感到困惑。你有一個真實的DAO實例,以及一個模擬實例。您似乎在檢查在實際實例上調用方法時,在模擬實例上調用相同的方法。我想不出爲什麼這個測試會通過任何理由。對於你關於'Session'的問題,我會給你一個很好的答案,但首先你需要闡明'getEntityManager()'返回的實體管理器如何進入DAO實現?它是一個構造函數的參數,還是存在一個setter方法?請澄清。 –

+0

你好,我在我的DAO界面中用@Autowired解決了這個問題,而不是創建一個新的實例,現在我已經有了很好的覆蓋範圍,我將發佈正確的代碼。 –

+0

我可以在原始問題代碼下面發佈正確的代碼嗎? –

回答

1
@Autowired 
private MyDAOImpl myDAOImpl; 

@PersistenceContext 
private EntityManager entityManager; 

@Before 
public void init() { 
    myDAOImpl.setEntityManager(entityManager); 
    objectTeste = new MyObject(); 
    object = new MyObject(); 
} 

@Test 
    public void testSave() { 
    objectTeste = myDAOImpl.salvarOuEditar(object); 
    Assert.assertEquals(objectTeste, object); 
    Assert.assertEquals(object.getId(), objectTeste.getId()); 
} 

這樣的會議不來空! 謝謝大家!