Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个类似dbunit的框架不';对于java/scala来说,它不是很烂吗?_Java_Database_Testing_Scala_Dbunit - Fatal编程技术网

是否有一个类似dbunit的框架不';对于java/scala来说,它不是很烂吗?

是否有一个类似dbunit的框架不';对于java/scala来说,它不是很烂吗?,java,database,testing,scala,dbunit,Java,Database,Testing,Scala,Dbunit,我在考虑创建一个新的、轻量级的数据库总体框架。我绝对讨厌这个单位。在我做之前,我想知道是否有人已经做了 我不喜欢dbunit的东西: 1) 不推荐使用最简单的编写和启动格式。他们希望您使用臃肿的格式。有些甚至需要xml模式。是的,随便了 2) 它们不是按照您写入行的顺序填充行,而是按照xml文件中定义的顺序填充表。这是非常糟糕的,因为您不能以外键约束不会导致问题的方式对数据进行排序。这只会迫使你经历完全关闭它们的麻烦 这也会浪费时间,并且会使junit基类膨胀,从而包含禁用外键约束的代码。您可能

我在考虑创建一个新的、轻量级的数据库总体框架。我绝对讨厌这个单位。在我做之前,我想知道是否有人已经做了

我不喜欢dbunit的东西:

1) 不推荐使用最简单的编写和启动格式。他们希望您使用臃肿的格式。有些甚至需要xml模式。是的,随便了

2) 它们不是按照您写入行的顺序填充行,而是按照xml文件中定义的顺序填充表。这是非常糟糕的,因为您不能以外键约束不会导致问题的方式对数据进行排序。这只会迫使你经历完全关闭它们的麻烦

这也会浪费时间,并且会使junit基类膨胀,从而包含禁用外键约束的代码。您可能需要测试数据库类型(hsqldb等),并以特定于数据库的方式禁用它们。这太糟糕了

如果dbunit帮助自动禁用外键约束作为其框架的一部分,可能会更好,但他们不会这样做。他们确实在追踪方言。。。那么为什么不使用它们呢?最终,所有这些都会迫使程序员浪费时间,而不是快速地开始测试

3) 编写XML是一件痛苦的事情。我不需要再多说了。他们也提供了很多方法,我认为这会使事情复杂化。只要提供一个真正可靠的方法,并完成它

4) 当您的数据变大时,跟踪ID及其一致/正确的关系是一件非常痛苦的事情

另外,如果你有一个月没有做一个项目,你怎么记得用户_id 1是管理员,用户_id 2是商业用户,用户_id 3是工程师,用户_id 4是其他什么?回去检查这件事是在浪费更多的时间。应该有一个有意义的方法来检索它,而不是一个任意的数字

5) 很慢。我发现,除非使用hsqldb,否则它的速度非常慢。不一定是这样。还有很多方法可以搞乱它的配置,因为“开箱即用”并不容易。要使它正常工作,你必须经历一个困难。所有这一切都是鼓励人们不要使用它,或者当他们开始使用它时感到愤怒

6) 有些值经常重复,比如日期。最好指定默认值,甚至让框架自动输入默认值,即使您没有告诉它将默认值输入其中。这样,您就可以仅使用所需的值创建对象,而不使用其他值。如果不需要的话,这肯定比指定列的每个角落要好得多

7) 可能最烦人的事情是第一个条目必须包含所有的值——即使是空占位符——否则未来的行将不会选择您实际指定的列

DBunit也没有将[NULL]转换为实际NULL值的合理默认值。您必须手动添加它。告诉我,谁没对dbunit做过这件事?每个人都有。不应该是这样的

这意味着,如果您有一个多态对象,则必须声明第一行中每个子类的连接表的所有外键,即使它们为null。如果您为所有子类模式创建一个表,那么仍然必须指定第一行上的所有字段。这太糟糕了


有什么可以让我满意的吗,或者我应该成为下一个更好的数据库测试框架的框架开发人员吗?

这里列出了一些我特别喜欢或感兴趣的工具(除了DBunit)。至少他们可以提供一些灵感:


请注意,就范围或功能集而言,这些都不是DBunit的真正竞争对手。然而,有一些有趣的想法可能值得一看。祝你好运

我不知道DbUnit有什么真正的替代品,我也不知道所提到的任何工具:

  • :不可知
  • :用于测试数据库存储过程的回归和单元测试工具(这不是DbUnit的目的)
  • :用于容器内测试的工具(我看不出它对数据库有何帮助)
  • :数据库迁移工具(不加载/验证数据)
  • :可以初始化数据库,但仅此而已
  • :根本不与DbUnit竞争
话虽如此,我个人已经在小型和大型项目上成功地使用了DbUnit好几次,我发现它非常有用,尤其是在使用和它的DbUnit模块时。这并不意味着它是完美的,不能改进,但使用合适的工具(定制或类似Unitils的东西),使用它是一种不错的体验

让我回答你的一些观点:

  • 不推荐使用最简单的编写和启动格式。他们希望您使用臃肿的格式。有些甚至需要xml模式。是的,随便了
  • DbUnit支持平面或结构化XML、XLS、CSV。您希望使用什么革命性的格式?顺便说一下,在使用XML时,DTD或模式不是必需的。但它给了你一些好东西,比如验证和自动完成,这有什么不好的?Unitils可以为您轻松生成它,请参见

    如果dbunit帮助自动禁用外键约束作为其框架的一部分,可能会更好,但他们不会这样做。他们确实在追踪方言。。。那么为什么不使用它们呢?最终,所有这些都会迫使程序员浪费时间,而不是快速地开始测试

    他们正在等待你的补丁

    同时,Unitils支持透明地处理约束,请参见

  • 编写XML是一件痛苦的事情。我不需要再多说了。他们也提供了很多方法,我认为这会使事情复杂化。只要提供一个真正可靠的方法,并完成它
    allStudents = table(Student, ['id', 'name', 'grade']) {
        row 1, 'Joe', Grade.A
        rowOfInterest = row 2, 'John', Grade.B
    }
    
    @RunWith(JUnitPlatform.class)
    @ExtendWith(DBUnitExtension.class)
    @DBUnit(cacheConnection = true, cacheTableNames = true)
    class TestInstrumentQueryService {
    
        private ConnectionHolder connHolder = () -> EntityManagerProvider.instance("my-jta-unit").connection();
    
        @DBRider
        @DataSet("datasets/instrumentIds.yml")
        void testFindInstrumentById() {
    
            InstrumentQueryService iqs = new InstrumentQueryService(EntityManagerProvider.em());
    
            Instrument instr = iqs.findInstrumentById(InstrumentIdType.TICKER_BBG, "AAPL");
            assertEquals(100, instr.getId());
        }
    }