0
public String createUser() {

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

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

    return "accountCreated";

}

如何为此方法编写单元测试用例?

4

1 回答 1

3

很难对包含对静态方法的调用的代码进行单元测试,例如HibernateUtility.getSession().

您可能会考虑注入 Session 实例(可能通过向createUser()方法添加参数,或者通过为包含此方法的Session Factory对象提供可用于获取Session实例的对象)。然后,您可以使用 Mockito 或类似框架Session为该方法提供一个模拟对象,并验证对其进行的预期调用。

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();
}
于 2012-07-20T07:07:32.220 回答