为什么在django.test.TestCase.setUp中设置的属性在测试方法中重置为默认值?

时间:2019-07-02 11:27:26

标签: unit-testing django-models

我有一个测试类,在其中我将对象属性设置为setUp()的一部分,如下所示:

myObj = model.MyModel.objects.filter(myfilters)
myObj.the_property = 1234
myObj.save()

在这三行setUp()调用一个外部方法之前,该方法将创建对象,然后使用指示的filter语句选择该对象。

setUp()中,我确认属性设置正确:

  • 首先我只是

    print(myObj.the_property)
    
  • 然后我什至

    q = models.MyObj.objects.filter(myfilters)
    print(q.values)
    

在两个打印语句中,我都能看到myObj.the_property被设置为1234,正如预期的那样。

然后,按照我的test_方法

obj = models.MyObj.objects.filter(myfilters)[0]
print(obj.the_property)

这一次,打印语句将打印None

  

是否应该这样做?在测试开始之前,我该如何一次分配作业?​​

我可以通过将作业移到测试中来轻松解决问题,但是我会重复自己。

我试图找到我的代码有问题,但是这个问题似乎源于Django内部的某个地方。我...

  • ...检查了id值。 myfilters每次都获取相同的对象。我肯定在看正确的对象。

  • ...仅运行一种test_方法。其他测试不会有任何副作用。

  • ...将我的检查从测试方法中移到了测试的开始,在filterprint行之前没有任何其他代码。

  • ...将作业和save()剪切/粘贴到我的test_方法的开头(在filter行之前),并在执行该操作时如预期般运作。

0 个答案:

没有答案