使用 dao 创建并获取 id 的 junit 测试

Posted

技术标签:

【中文标题】使用 dao 创建并获取 id 的 junit 测试【英文标题】:junit test with dao create and get id 【发布时间】:2016-10-31 18:54:35 【问题描述】:

我有这项服务需要为其创建单元测试:

            SomeObject obj = new SomeObject();

            String objConfig = "<root id=%id% param1="something">....</root>"

            obj.setField1("value1");
            obj.setField2("value2");

            someObjectDao.create(obj);

            Long objId = obj.getId();
            obj.setConfig(objConfig.replace("%id%", objId.toString()));
            someObjectDao.update(obj);

现在的问题是,在实际情况下,DAO 创建会为对象分配 ID,但是如何通过单元测试设置对象 ID?

【问题讨论】:

【参考方案1】:

您可以通过两种方式执行此操作(如果您使用的是 JUnit 4):

    使用真正的 DAO 并将测试类标记为 @Transactional 和 @Rollback。每个测试方法都会在单独的事务中打开,记录会被插入数据库并像在实际系统中一样处理,但是在方法退出后会发生回滚。

    使用一些模拟框架,即mockito,模拟someObjectDao的create()方法,随意设置id。

【讨论】:

以上是关于使用 dao 创建并获取 id 的 junit 测试的主要内容,如果未能解决你的问题,请参考以下文章

如何编写单元测试 (JUnit) 以使用 DAO 类检查数据库连接?

使用自动生成的键为数据库项创建 JUnit 测试

在通用 DAO 中获取当前对象 ID。休眠

JUnit 在带有 @Autowired 注释的 Spring Boot 中不起作用

Junit测试调用Dao类的Business类

使用 JUnit 和 Mockito 对 DAO 类进行单元测试