Django中的单元测试:如何初始化数据库

时间:2013-08-05 06:55:21

标签: python django unit-testing testing django-fixtures

我正在尝试使用Django进行测试驱动开发。我的问题是我需要在运行测试之前在数据库中添加一些东西,例如许多用户,部门和他们的权限。我尝试使用fixture来做到这一点,但我发现整个过程非常不直观(我也发现当我删除并重新同步我的数据库时,我的用户设备被破坏了,因为权限只能通过id引用)!

我已经搜索了这个预测试数据库初始化的其他解决方案,但我只能找到在TestCase类的setUp方法中执行初始化的非常简单的情况。当你拥有一个具有不同用户和权限的应用程序时,我并不真的可以使用这些方法。

在开始大型应用程序的测试之前,您能告诉我如何填充数据库吗?除了fixtures和setUp类之外还有更好的方法吗?

1 个答案:

答案 0 :(得分:6)

模型工厂(以及factory_boymodel_mommy等工具)是更好的选择。

根据Carl Mayer关于“测试和Django”的slides,灯具是:

  • 难以维护和更新。
  • 增加测试的相互依赖性。
  • 加载缓慢。

最好使用模型工厂,为什么?

  • 测试测试代码的本地数据(显式)。
  • 易于维护。
  • 请勿创建该测试不需要的任何数据。
  • 即使对于大型/复杂的测试数据集(辅助函数)也能很好地工作。

就个人而言,我几乎在每个django项目中都使用factory_boy进行测试。值得一试,看一看。

另见,见: