2012-07-20 75 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

相关问题