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

Ser*_*eim 2 python testing django unit-testing django-fixtures

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

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

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

ale*_*cxe 6

示范工厂(等工具factory_boymodel_mommy)是一个更好的选择.

根据Carl Mayer 关于"Testing and Django" 的幻灯片,灯具是:

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

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

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

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

另见,见: