您的位置:首页 > 其它

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

2017-08-06 15:20 991 查看
单元测试时数据的准备与验证是一个很繁琐的过程,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则测试用例执行完后重置数据库清理掉数据。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: