为什么我不能为我的 Django 项目创建自己的测试数据库?
Why can't I make my own test database for my django project?
我目前正在决定将哪些测试包用于我的 django 项目,特别是如何在我 运行 测试之前填充数据。我调查过:
固定装置:很多人似乎反对这一点,因为修改 JSON 可能很困难且难以维护。
工厂男孩:我的项目有很多层次,所以我觉得从层次非常低的模型创建对象真的很慢。
我的想法是制作一个我将始终 运行 测试的数据库。因为我知道里面有什么数据,它不应该像没有 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 数据库中已有的内容,而不会发现错误。
可能由于唯一性限制,您需要测试的不同值不能同时存在于数据库中。
可能还有更多,但我需要睡觉。
我目前正在决定将哪些测试包用于我的 django 项目,特别是如何在我 运行 测试之前填充数据。我调查过:
固定装置:很多人似乎反对这一点,因为修改 JSON 可能很困难且难以维护。
工厂男孩:我的项目有很多层次,所以我觉得从层次非常低的模型创建对象真的很慢。
我的想法是制作一个我将始终 运行 测试的数据库。因为我知道里面有什么数据,它不应该像没有 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 数据库中已有的内容,而不会发现错误。
可能由于唯一性限制,您需要测试的不同值不能同时存在于数据库中。
可能还有更多,但我需要睡觉。