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

时间:2017-01-11 22:02:34

标签: django factory-boy

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

  1. 灯具:很多人似乎反对这一点,因为修改JSON可能很难并且难以维护。

  2. 工厂男孩:我的项目有很多层次结构,所以我觉得从层次结构中真正较低的模型创建一个对象真的很慢。

  3. 我的想法是创建一个我将始终运行测试的数据库。既然我知道它里面有什么数据,那么在没有JSON麻烦的情况下,它是否应该与灯具类似?由于我没有通过我的研究看到这个想法,我认为这是一个坏主意。为什么这是一个坏主意?

1 个答案:

答案 0 :(得分:2)

你真的和工厂男孩一起测试过吗?使用内存中的sqlite数据库,根据我的经验,它非常快,而且对于层次结构非常方便。

您的数据库构思与fixtures大致相同 - 您可以使用数据库通过在其上运行dumpdata管理命令来创建JSON fixture,并将测试数据保存在数据库中而不是JSON文件。

优先选择工厂男孩而非测试数据库的一些理由:

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

  • 数据附带测试代码,无需管理额外文件或数据库转储。

  • 工厂男孩非常善于使用层次结构(“我想要一个这个实例的实例,所有字段都是默认值,除了这一个字段在层次结构中有六个步骤” - instance = InstanceFactory.build(series__study__patient__archive__project__algorithm_type='foo')

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

  • 您不必为当前测试选择有趣的边框情况,而是试图重新使用数据库中已有的东西,而不是发现错误。

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

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