单元测试在日常开发中有很重要的地位,它贯穿了开发中的各个角落。本文将结合笔者在最近项目中的数据库操作实例,针对数据库查询的例子,采用三种方法逐步深入单元测试。希望通过查询操作的实例解析为大家在日后的数据库操作的单元测试覆盖带来一些启发。
查询操作的单元测试
1.手动录入测试记录
在谈及查询数据库的单元测试时,最容易想到的就是先手动将测试的记录录入到数据库表中,然后进行查询以及断言。
以下是需要测试覆盖到的代码
测试记录录入到数据库表中
查询录入的测试记录并进行断言
单元测试覆盖成功
手动录入测试记录,然后进行单元测试,这是最简单的方法,然而在实际中存在一些弊端。首先是测试记录实际写入到数据库表中,当测试记录添加比较多的时候会对数据库造成一定的负担;其次是在多人合作操作中,测试记录容易被进行误删操作。于是,笔者有了进一步的优化想法。
2.调用方法录入和删除测试记录
在这种方法中,首先通过调用方法将要测试的记录写入到数据库表中,然后进行测试断言,最后调用方法将测试的记录删除。
调用方法插入测试实例记录
调用方法删除测试实例记录
单元测试覆盖成功
可以看到,通过调用方法来插入和删除测试实例,同样可以成功地进行单元测试覆盖。该方法与第一部分的方法相对比,不用依赖数据库表中手动输入的测试记录,避免了由于团队中其他人误删数据而造成的无法成功测试。
3.运用回滚的方式代替删除方法
在第二种方法中,笔者通过调用方法实现插入和删除测试记录数据,成功进行单元测试覆盖。然而在这种方法中,测试数据必须得实际写入到数据库表中。为了进一步优化,笔者采用数据回滚的方式代替调用方法删除测试数据。
首先,笔者对BaseTest类进行配置,将事务关联到配置文件中的事务控制器transactionManager="transactionManager",指定自动回滚为真,defaultRollback = true,这样的操作保证不会污染数据库。
更多地,这样的处理可以将测试数据统一放在这个基类中方便管理,然后使得测试类继承该基类即可。
采用回滚方式的测试代码如下
单元测试覆盖成功
可以看到,通过采用回滚的方式进行单元测试,可以成功完成单元测试覆盖。与第二种方法相比,这种方法不用再调用方法来进行删除测试数据,使得代码更为简练;并且采用回滚的方式,测试实例记录并没有真正写入到数据库表中。
小结
本文以数据库操作中的查询为切入点,逐步深入地引出了三种单元测试的方法,以逐步优化代码的思路,希望可以给大家在平常的单元测试编写时提供一些帮助。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。