为什么我不能为我的 Django 项目创建自己的测试数据库?

Why can't I make my own test database for my django project?

我目前正在决定将哪些测试包用于我的 django 项目,特别是如何在我 运行 测试之前填充数据。我调查过:

  1. 固定装置:很多人似乎反对这一点,因为修改 JSON 可能很困难且难以维护。

  2. 工厂男孩:我的项目有很多层次,所以我觉得从层次非常低的模型创建对象真的很慢。

我的想法是制作一个我将始终 运行 测试的数据库。因为我知道里面有什么数据,它不应该像没有 JSON 的麻烦的固定装置一样工作吗?由于我还没有通过我的研究看到这个想法,我认为这是一个坏主意。为什么这是个坏主意?

你真的和工厂男孩一起测试过吗?根据我的经验,使用 in-memory sqlite 数据库非常快,而且层次结构超级方便。

你的数据库的想法和fixture差不多——你可以使用数据库通过运行在上面的dumpdata管理命令创建JSON fixtures,并维护您的测试数据在数据库中,而不是在 JSON 文件中。

比起测试数据库更喜欢工厂男孩的一些原因:

  • 数据是在测试中生成的,因此很明显会发生什么以及哪些字段与测试相关。

  • 数据随测试代码一起提供,无需管理额外的文件或数据库转储。

  • 工厂小哥很有层次感("I want an instance of this instance with all fields the default value, except this one field six steps up in the hierarchy" -- instance = InstanceFactory.build(series__study__patient__archive__project__algorithm_type='foo'))

  • 有时一个对象根本不需要保存到数据库就可以测试它的方法,在这种情况下工厂男孩的 .build() 非常快。

  • 您不会为当前测试选择有趣的边界情况,而是很想 re-use 数据库中已有的内容,而不会发现错误。

  • 可能由于唯一性限制,您需要测试的不同值不能同时存在于数据库中。

可能还有更多,但我需要睡觉。