DBUnit--测试数据准备与验证的利器

单元测试时数据的准备与验证是一个很繁琐的过程,DBUnit为之提供了一套优雅的解决方案,可以帮我们从中解脱出来。

DBUnit数据准备

DBUnit支持将准备的数据放置在一个xml文件中,在执行测试用例之前自动同步到数据库中,执行完成后数据也可以自动销毁。示例如下:

<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
    <User UserId="200" UserName="tony" Age="25" pointValue="2000" />
</dataset>

User表示是数据库中的表,UserId、UserName等表示表中的字段。我们可以在dataset中写入多个这样的记录,文件中每条记录对应数据库表中的一行记录。

DBUnit数据验证
假如我们执行一个测试用例把上面的记录中的pointValue=”2000” 更新为2500,通常的验证方式是更新后再去查询数据库再做比对。而DBUnit支持你将一个预期结果写到xml文件中,当测试用例更新完后会和数据库中的数据自动做比较,看看是否符合预期。下面是预期结果的xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
    <User UserId="200" UserName="tony" Age="25" pointValue="2500" />
</dataset>

由于DBUnit官方提供的用法和测试用例耦合太强,这里比较推荐spring-test-dbunit,我们可以通过几个简单的注解实现与测试的解耦:

@DatabaseSetup :将特定xml文件中的数据同步到数据库
@DatabaseTearDown: 清理数据
@ExpectedDatabase :数据验证,
其assertionMode属性支持两种验证方式–DatabaseAssertionMode.DEFAULT 要验证所有的字段,DatabaseAssertionMode.NON_STRICT则支持只验证部分字段,这个实际测试中更为常用,毕竟多数情况下并不需要验证所有的字段。
此外,@ExpectedDatabase只能用于增删改三种场景!

上面这几个注解要起作用,记得首先要在@TestExecutionListeners中配置DbUnitTestExecutionListener,具体用法下篇会有完整示例。

下面是spring-test-dbunit注解的用法的示例:

    @Test
    @DatabaseTearDown
    @DatabaseSetup("/data/user-setUpData.xml")
    @ExpectedDatabase(table = "User",
            assertionMode= DatabaseAssertionMode.NON_STRICT,
            value= "/data/updatePoint-exceptedData.xml")
    public void testUpdatePointValue() throws Exception {

        int result = userDao.updatePointValue(200L,2500L);
        Assert.assertEquals(result,1);
    }

这里,@DatabaseSetup会把/data/user-setUpData.xml文件中的数据同步到数据库,然后执行updatePointValue,将pointValue更新为2500,最后再拿数据库中更新后的数据和/data/updatePoint-exceptedData.xml文件中的数据做比较。@DatabaseTearDown则测试用例执行完后重置数据库清理掉数据。

更多内容欢迎关注个人微信公众号,一起成长!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值