【问题标题】:Django testcase without database migrations and syncdb没有数据库迁移和同步数据库的 Django 测试用例
【发布时间】:2015-12-06 08:33:51
【问题描述】:

我正在尝试为我的迁移函数创建测试用例(使用migrations.RunPython 调用)。我的想法是创建一个在开始之前不运行迁移的测试用例,也不是 syncdb 一步创建数据库。在此之后,我计划运行第一步,运行相关测试,运行第二步,然后运行其相关测试等。这是否可能,或者如果没有,是否可以以任何方式测试迁移功能?

【问题讨论】:

  • 真的有用吗?当您使用 TestCase 时,所有迁移都会一个一个地运行(至少我的覆盖率报告似乎表明了这一点)
  • 如果你告诉我另一种方法来测试我的迁移功能,我可以继续这样做(毕竟,这就是我添加用例的原因)。覆盖率输出显示我的迁移功能没有被覆盖;那是因为没有数据可以运行它们。
  • FAIK 没有数据不是问题。它仍然被覆盖。我的迁移文件是显示 100% 覆盖率的少数几样东西:-)
  • 你使用RunPython吗?
  • 是的,我确实使用 RunPython 进行了一次迁移,其中一些触发器是使用自定义 sql 创建的。刚刚进行了这些测试。该文件的 100% 覆盖率。使用 -k 选项运行测试的赌注是什么

标签: python django django-testing django-migrations


【解决方案1】:

当你使用 django 的 TestCase 时,它明确要求必须设置数据库,这意味着必须应用所有迁移。如果您想在不发生迁移的情况下进行测试,则不能使用TestCase

使用不依赖 django 的测试工具包,如pytest,并编写自己的代码进行测试。您始终可以显式导入 django 模型和设置。

您的测试将首先运行未创建数据库的显式测试,之后可以运行包含TestCase 的其他测试。

我不确定manage.py 是否可以进行这样的设置,但您当然可以创建自己的脚本(可能使用fabric 或普通的python)来按照您选择的顺序运行测试。

【讨论】:

  • 这实际上让我想到了覆盖TestCase(或更可能是TransactionTestCase。我已经在另一个项目中做了同样的事情,我想完全跳过数据库创建/处理。这样我将不得不自己创建数据库,并逐步运行迁移(我希望)。我很快就会回来(ish)。
  • 既然TestCase 已经非常优雅地处理了所有工作,为什么还要自己处理?
  • 我的意思是,为什么重复代码而不是通过为迁移创建外部测试并然后调用django测试运行来扩展它?
猜你喜欢
  • 2012-06-05
  • 2018-03-11
  • 2012-03-10
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2014-10-07
相关资源
最近更新 更多