java - 如何为该方法编写单元测试用例?

标签 java junit

public String createUser() {

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

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

    return "accountCreated";

}

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

最佳答案

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

您可能会考虑注入(inject) 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();
}

关于java - 如何为该方法编写单元测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11574392/

相关文章:

java - Google 端点无法在本地主机中接收 utf-8 字符

java - 当对象通过 post 命令发送到 spring WebApp 时,对象字段为 null

java - Picasso Android 内存问题,当 fragment 被替换时

java - Eclipse 剪切/复制/粘贴不起作用

java - Junit 测试在使用数据库和实体管理器时随机失败

java - 如何在 Eclipse 中将 github maven 项目作为 jar 文件导入?

java - 通过代码包含布局来控制约束

java - 为什么我得到 "Failed to load ApplicationContext"Spring, jUnit with JavaConfig

java - 查找数组中行的绝对值,然后打印答案中的最大值

java - 带有 Jacoco 插件的 build.gradle 不会为集成测试生成覆盖率报告