T. *_*one 17 django unit-testing
我正试图通过Django过渡到测试.这是用于测试的特定模型:
class Media(models.Model):
file = models.FileField(upload_to='upload',)
thumbnail = models.ImageField(upload_to='upload', blank=True,)
# ...
Run Code Online (Sandbox Code Playgroud)
第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)
Run Code Online (Sandbox Code Playgroud)
小智 18
嗨我刚才有同样的问题,经过一些谷歌搜索我最终得到:
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()
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人.
这是我的问题的部分答案,并帮助从搜索中找到此问题的任何其他人.
Django包含一个工具,它称为"固定装置",用于处理测试期间的主要数据加载.创建夹具是一个两步过程:
fixture文件*.json保留在Django项目根文件夹中.
在tests.py文件中,您可以在Django TestCase类中加载fixture,如下所示:
class YourTestCase(TestCase):
fixtures = ['filename.json','whatever.json',]
Run Code Online (Sandbox Code Playgroud)
加载夹具后,您可以像通常使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6140 次 |
| 最近记录: |