【问题标题】:Object creation issue in Django unittestDjango unittest 中的对象创建问题
【发布时间】:2019-11-15 10:05:43
【问题描述】:

我有一个 Django 测试用例,我正在 setUp 中创建一些对象:

OBJ_COUNT = 4

class ObjTest(TestCase):

    def setUp(self):
        for i in range(OBJ_COUNT):
            Obj.objects.create()

运行此测试会产生 5 个,而不是 4 个对象。

【问题讨论】:

  • 5 不是由可能在其他地方打印的range(..) 打印的。在您的模型、视图……中可能有一个 print(..) 语句来执行此操作。
  • 当然,除非您在某处导入了名称为 range 的内容,从而覆盖了对“原始”range(..) 的引用。
  • 请注意,您的输出缺少 4 - 5 不是代码中 print 的结果。
  • @MisterMiyagi 如果 OBJ_COUNT 为 3,则输出 0 1 2 4。
  • @rkardashov range 是具有明确语义的内置函数。在显示的代码中,它的行为与描述的完全一样。

标签: python django python-3.x unit-testing


【解决方案1】:

测试数据库是问题所在。

我保留数据库以使测试运行得更快:

$ ./manage.py test appname --keepdb

在某个时刻,在迁移或其他任何事情之后,数据库会损坏:在每次测试运行开始时它总是有 1 个 Obj 对象。

在干净的数据库(没有--keepdb)上运行测试后,它开始按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-02
    • 2015-08-29
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2021-02-14
    • 2019-02-10
    相关资源
    最近更新 更多