我想使用 django setUpTestData準備一些在多個單元測驗之間共享的大量資料。我的模型實體是用一些檔案欄位創建的。
但是,從一個測驗到另一個,檔案內容沒有更新,它在我的測驗之間有副作用
這是一個極簡主義的例子:
模型.py
from django.db import models
class MyModel(models.Model):
my_file = models.FileField(upload_to="tests/")
測驗.py
from django.core.files.base import ContentFile
from django.test import TestCase
from core.models import MyModel
class Test(TestCase):
@classmethod
def setUpTestData(cls):
cls.instance = MyModel()
cls.instance.my_file.save("file.txt", ContentFile("Hello from setUpTestData"))
def test_a(self):
with open(self.instance.my_file.path, "r") as fp:
self.assertEqual(fp.read(), "Hello from setUpTestData")
self.instance.my_file.save("file.txt", ContentFile("Modified data"))
def test_b(self):
with open(self.instance.my_file.path, "r") as fp:
self.assertEqual(fp.read(), "Hello from setUpTestData")
self.instance.my_file.save("file.txt", ContentFile("Modified data"))
單獨運行這兩個測驗中的任何一個都可以,但是在另一個之后運行一個失敗:
AssertionError: 'Modified datatUpTestData' != 'Hello from setUpTestData'
- Modified datatUpTestData
Hello from setUpTestData
如何確保正確重置檔案?我是否對檔案中的這些內容感到擔憂?
在 setUpTestData() 中分配給類屬性的物件必須支持使用 copy.deepcopy() 創建深層副本
我覺得 fileField 應該默認由 Django 處理,但它不起作用,我該怎么辦?我應該嘗試覆寫__deepcopy__我的模型嗎?出于測驗目的修改我的代碼是一種不好的模式。
uj5u.com熱心網友回復:
我通過使用 setUp 和 tearDown 找到了解決方案
def setUp(self) : # copy original files
shutil.copytree(settings.MEDIA_ROOT, "/tmp/tests", dirs_exist_ok=True)
def tearDown(self) : # restore original files
shutil.copytree("/tmp/tests", settings.MEDIA_ROOT, dirs_exist_ok=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/447690.html
