我正在考虑制作一个新的、轻量级的数据库填充框架。我绝对讨厌 dbunit。在我这样做之前,我想知道是否有人已经这样做了。
我不喜欢 dbunit 的地方:
1) 不推荐使用最简单的编写和入门格式。他们希望您使用臃肿的格式。有些甚至需要 xml 模式。好吧,无所谓了。
2)它们不是按照您编写它们的顺序填充行,而是按照在 xml 文件中定义的顺序来填充行。这真的很糟糕,因为您不能以外键约束不会导致问题的方式对数据进行排序。这只会迫使您经历完全关闭它们的麻烦。
这也会浪费时间并使您的 junit 基类膨胀以包含禁用外键约束的代码。您可能必须测试数据库类型(hsqldb 等)并以特定于数据库的方式禁用它们。这太糟糕了。
如果 dbunit 帮助自动禁用外键约束作为其框架的一部分,可能会更好,但他们不这样做。他们确实跟踪方言......那么为什么不使用它们呢?最终,所有这些都会迫使程序员浪费时间而不是快速起床并进行测试。
3) XML 写起来很痛苦。关于这一点我不需要多说。他们还提供了很多方法来做到这一点,我认为这只会使事情复杂化。只需提供一种真正可靠的方法并完成它。
4)当您的数据变大时,跟踪 id 及其一致/正确的关系是一件非常痛苦的事情。
另外,如果你一个月不做一个项目,你怎么记住 user_id 1 是管理员,user_id 2 是业务用户,user_id 3 是工程师,user_id 4 是别的什么?回去检查这会浪费更多时间。除了任意数字之外,应该有一种有意义的方式来检索它。
5)它很慢。我发现除非使用 hsqldb,否则它会非常缓慢。它不一定是。还有很多方法可以弄乱它的配置,因为“开箱即用”并不容易。您必须经历一个驼峰才能使其正常工作。所有这些都是鼓励人们不要使用它,或者当他们开始使用它时会生气。
6)有些值往往会重复很多,比如日期。最好指定默认值,甚至让框架自动放入默认值,即使您没有告诉它在其中放入默认值。这样你就可以只用你想要的值来创建对象,剩下的就不用了。如果不需要,这肯定优于指定列的每个角落和缝隙。
7)可能最烦人的事情是第一个条目必须包含所有值 - 甚至是空占位符 - 否则未来的行将不会选择您实际指定的列。
DBunit 也没有将 [NULL] 转换为真正的空值的合理默认值。您必须手动添加它。告诉我,谁没有用 dbunit 做过这个?每个人都有。不应该是这样的!
这意味着,如果您有一个多态对象,则必须在第一行中为每个子类的连接表声明所有外键,即使它们为空。如果您为所有子类模式创建一个表,您仍然必须在第一行指定所有字段。这太可怕了。
有什么可以让我满意,还是我应该成为更好的数据库测试框架的下一个框架开发人员?