我正在尝试使用Django过渡到测试。这是用于测试的特定模型:
class Media(models.Model):
file = models.FileField(upload_to='upload',)
thumbnail = models.ImageField(upload_to='upload', blank=True,)
# ...
第1部分:我如何处理这些FileFields? (特别是在我需要生成虚假条目以测试代码位的意义上)
第2部分:下面是我开始编写的测试代码。我这样做是正确的,还是应该使用“嘲弄”的形式?
from django.test import TestCase
from django.test.client import Client
from django.contrib.auth.models import User
from mediamanager.models import Media
class MediaManagerTestCase(TestCase):
def setUp(self):
self.fake_user = User.objects.create(username='fakeuser', is_staff=false)
self.fake_staff = User.objects.create(username='fakestaff', is_staff=true)
self.fake_admin = User.objects.create(username='fakeadmin', is_superuser=true)
self.fake_media_image = Media.objects.create() # Hmmm...
self.fake_media_video = Media.objects.create() # How do i do this...
def testMediaCanEdit(self):
perm = self.fake_media_image.can_edit(self.fake_user)
self.assertEquals(perm, false)
答案 0 :(得分:17)
嗨我刚遇到同样的问题,经过一些谷歌搜索后我最终得到了:
from django.test import TestCase
from django.core.files import File as DjangoFile
from home.models import Tab, File
class FileModelTest(TestCase):
def setUp(self):
self.tab = Tab.objects.create(
title="Title",
html="<p>test</p>",
published=True
)
self.file = File.objects.create(
tab=self.tab,
file=DjangoFile(open("home/tests/models.py"), "test_file.css")
)
def tearDown(self):
self.file.delete()
self.tab.delete()
希望这有助于某人。
答案 1 :(得分:5)
这是对我的问题的部分答案,并帮助其他从搜索中找到此问题的人。
Django包含一个它称为'fixtures'的工具来处理测试期间的主要数据加载。创建夹具是一个两步过程:
fixture文件* .json保留在Django项目根文件夹中。
在tests.py文件中,您可以在Django TestCase类上加载fixture:
class YourTestCase(TestCase):
fixtures = ['filename.json','whatever.json',]
加载灯具后,您可以像通常使用ORM一样使用数据。如果你想要一个例子,这是我上面代码中的工作测试用例。
from django.test import TestCase
from django.contrib.auth.models import User
from mediamanager.models import Media
class MediaManagerTestCase(TestCase):
fixtures = ['auth_data.json','mediamanager_data.json',]
def setUp(self):
self.fakeuser = User.objects.get(username='fakeuser')
self.fakestaff = User.objects.get(username='fakestaff')
self.fakeadmin = User.objects.get(username='fakeadmin')
def test_media_can_edit(self):
um = Media.objects.get(pk=1) # Media owned by fakeuser
sm = Media.objects.get(pk=2) # Media owned by fakstaff
self.assertEquals(um.can_edit(self.fakeuser), True)
self.assertEquals(sm.can_edit(self.fakeuser), False)
self.assertEquals(um.can_edit(self.fakestaff), True)
self.assertEquals(sm.can_edit(self.fakestaff), True)
self.assertEquals(um.can_edit(self.fakeadmin), True)
self.assertEquals(sm.can_edit(self.fakeadmin), True)
答案 2 :(得分:0)
您应该在灯具创建后初始化文件:
def setUp(self):
files = UpFile.objects.all()
for file in files:
filepath = os.path.join(settings.MEDIA_ROOT, file.upfile.name)
open(filepath, 'w').close()