2012-07-20 119 views
1
public String createUser() { 

    Session session = HibernateUtility.getSession(); 
    Transaction tx = session.beginTransaction(); 

    session.save(this); 
    tx.commit(); 
    session.close(); 

    return "accountCreated"; 

} 

如何編寫此方法的單元測試用例?如何編寫此方法的單元測試用例?

+1

你要考什麼?如果某些庫方法有效或沒有測試,則測試點不多......如果要測試createUser()方法的行爲,只需使用您的方法創建一個用戶,而不是搜索用戶,在測試完成後將其刪除。 – hovanessyan 2012-07-20 07:02:23

回答

3

單元測試代碼很難包含對靜態方法的調用,如HibernateUtility.getSession()

您可能會考慮注入Session實例(可能通過向createUser()方法添加參數,或者通過爲包含此方法的對象提供一個可用於獲取Session實例的對象)。然後,您可以使用Mockito或類似的框架爲該方法提供模擬對象,並驗證預期的調用方式。

public String createUser(Session session) { 
    Transaction tx = session.beginTransaction(); 

    session.save(this); 
    tx.commit(); 
    session.close(); 

    return "accountCreated"; 
} 

使用的Mockito,單元測試可能是這樣的:

public testCreateUser(){ 
    Session session = mock(Session.class); 
    Transaction trans = mock(Transaction.class); 

    when(session.beginTransaction()).thenReturn(trans); 

    obj.createUser(session); 

    verify(session).save(obj); 
    verify(session).close(); 
    verify(trans).commit(); 
} 
+0

謝謝:) 你能告訴我如何在java中創建模擬對象我無法在我的包中找到任何模擬類? – Kshitij 2012-07-20 11:14:51

+0

您需要爲此使用單獨的模擬庫,但沒有任何Java隨附的模塊。我更喜歡Mockito,但有很多選擇http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html – codebox 2012-07-20 16:04:22

相關問題