用 dbunit-maven-plugin 来管理你的测试数据
单元测试有人写过,也有人没做过,数据库的 dbunit 的用的人应该更少了,它可以用来给你做测试准备数据。一般我们做测试会在一个测试数据库中不停的测,自然会累积许多垃圾数据,给单元测试会造成不便,功能测试倒无太紧要。如果我们想在单元测试的时候有一份干净的数据,有个做法是搞个备用的数据库,测试前导到测试库的,或用某些数据库的导入导出功能。
这里我们来看 dbunit 怎么实现准备测试数据的,它可以用来导出数据库数据到数据文件中,从数据文件中导入干净的数据到数据库中,比较数据库与数据文件、或增量的插入记录等等。
dbunit 最初为 ant 提供了 antask,当然可以编程使用,如今 maven 大行其道,所以也就有了 maven 的 dbunit 插件,相似功能的插件有两个:
1.?dbunit-maven-plugin
2.?maven-dbunit-plugin
就是 maven 和 dbunit 倒了一下,别晕了,第二个似乎提供了更多的 goal,但运行 mvn dbunit:xxxx,指向的是第一个 dbunit-maven-plugin,看来第一个要正统些。本文也就介绍下dbunit-maven-plugin?的用法,测试数据库是 MySql。
看我们的 pom.xml 文件:
<project xmlns="<a href="http://maven.apache.org/POM/4.0.0" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xsi:schemaLocation="<a href="http://maven.apache.org/POM/4.0.0" name="code"><executions> <execution> <phase>process-test-classes</phase> <goals> <goal>operation</goal> </goals> <!-- specific configurations 我们可以在这里指定不同的配置--> <configuration> <format>xml</format> <src>src/export.xml</src> <type>CLEAN_INSERT</type> </configuration> </execution></executions>?因为 phase 也是按顺序执行的,这里设置的 goal 是 process-test-classes,所以当我们在执行 mvn process-test-classes 后会调用这个 dbunit:operation goal。而当我们执行 mvn test 时,会发现这个 dbunit:operation 会在 test 之前执行,这能也就能为我们准备好单元测试的数据了,不会因为小动了下数据库而让 test 全线告错。
对于另外两个 goal,dbunit:compare 和 dbunit:export 也可以采用类似的配置,让某个 phase 来调用。
最后,留意下每个 goal 的所有配置以及相应的默认值,比如在执行 dbunit:export 时可以用 <schema> 指定导出哪些表,再严格点可以用
tables> <table> <name>wp_users</name> <name>wp_posts</name> </table></tables>?指定导出某些特定的表。