有没有一个类似dbunit的框架对java/scala来说不糟糕?
我正在考虑制作一个新的,轻量级的数据库人口框架。我绝对讨厌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] 转换为实际 null 值的合理默认值。您必须手动添加它。告诉我,谁没有用dbunit做过这个?每个人都有。它不应该是这样的!
这意味着,如果您有一个多态对象,则必须向第一行中每个子类的联接表声明所有外键,即使它们为 null。如果为所有子类模式创建表,则仍必须指定第一行上的所有字段。这太可怕了。
有什么可以满足我的东西,或者我应该成为一个更好的数据库测试框架的下一个框架开发人员吗?