![]() |
1
3
好吧,正如我所见,这是一个结合已经存在的问题。 上述场景:
您可以将其扩展到一个执行以下操作的小程序:
对于应用迁移,我衷心推荐 Flyway . 它支持SQL(占位符替换)和基于Java的迁移。然后,您可以使用Maven插件或通过编程使用API应用迁移。后者完全符合这个情况。 然后,完整的工作流变成:
快乐的日子, 阿克塞尔 免责声明:我是Flyway的开发人员之一。 |
![]() |
2
3
我认为这个问题的答案分为两个阶段: 架构只有一个权威定义 数据库的外观应该只有一个定义。在正常情况下,我更喜欢使用指定数据库架构的SQL DDL脚本。 单元测试应该使用与应用程序相同的数据库模式的权威定义,并且 应该在测试运行之前基于该定义创建数据库,并在测试运行之后再次完全删除它 . 也就是说,工具可能与模式不同步,您需要手动更新工具生成的东西。例如,我使用.NET的实体框架,它根据数据库模式自动生成类。当我更改模式时,我需要手动告诉我的工具更新这些类。这是一种痛苦,但我不知道有什么办法可以摆脱它,除非工具支持自动化。 每个测试应该从空数据开始 每个测试都应该从没有任何数据的数据库开始。每个测试都应该填充 只有 它需要执行测试的数据,完成测试后,应该再次清理数据库。 您当前所做的工作听起来像是一个名为“通用夹具”的反模式,您试图预加载一组数据,这些数据表示尽可能广泛的一组场景。但是,这使得测试互斥条件非常困难,并且如果在某些测试中修改这个预加载的数据,也可能导致测试相互依赖性。 这在这本好书中解释得很清楚 xUnit Test Patterns . |
![]() |
3
2
我也有同样的问题,DBUnitXML平面文件在数据库模式演化时会失去同步,这确实需要数据更改(即使对于像添加强制列这样简单的事情)。 虽然使用一些手写脚本转换所有XML文件是一个选项,但我仍然认为应该在不同的抽象级别解决这个问题,这与处理实时数据的方式更相似:进化数据库设计。 数据库迁移工具已经知道delta脚本,所以拥有一种DBUnit适配器将是很好的选择。 如果找到以下包含此问题的日志: http://blog.liquibase.org/2007/06/unit-testing-the-database-access-layer.html
但他补充道:
…我猜,这对于更复杂的情况是不可能的。他继续说:
链接是:www.liquibase.org/manual/contexts,但这至少不是我想要的,尽管我可以将我的测试数据公开给一个数据库迁移工具,但我仍然希望它非常接近数据库测试。 有人想吗? |