在之前的一篇用spring-test、dbunit、flyway测试Java持久层中,我曾介绍过使用spring-test-dbunit提供的@DatabaseSetup和@ExpectedDatabase简化测试断言的方法,但使用这种办法也有痛点:
- 在数据准备(setup)文件和数据预期(expect)文件中存在大量重复的数据定义,随着数据结构逐渐丰富,需要同时修改这两个文件
- 调试过程中要在两个文件中不断切换,甚是麻烦,而且对比差异也不方便
降低非关键数据的干扰
优秀的测试会尽可能地直接突出影响测试结果的关键数据,它们越是醒目,
测试就容易被他人理解、越容易维护。而现在我们却还需要编写重复的数据,这可不行。
因此,我为spring-test-dbunit提供了一个小扩展,
使得setup和expect数据可以定义在同一个文件中(省去了切换的麻烦),而且没有重复数据!
目前,需要对测试用例进行三处改动来支持这个新的数据格式,请注意以下代码的注释:
除了added(对应insert)之外,GivenWhenThenFlatXmlDataSetLoader还支持delete声明:
你只需要把唯一标识要删除的数据的字段列出来,GivenWhenThenFlatXmlDataSetLoader会智能地找到它。
GivenWhenThenFlatXmlDataSetLoader还支持modify声明,用来支持测试update的用例,同样地,
你只需要列出有变化的字段,但遗憾的是,目前还无法为modified智能找到主键,你需要显示地告诉它 :-(
更详细的例子,可以参考Github上的说明.
如果你有改进的好点子,不妨告诉我或是干脆来个pull request :-)
comments powered by