我在为 ManyToManyField 条目开发测试时遇到了问题。我有一个像这样的简单博客模型:
class Tag(models.Model):
name = models.CharField(max_length=25)
class Entry(models.Model):
title = models.CharField(max_length=80)
author = models.ForeignKey(User)
pubdate = models.DateTimeField()
tags = models.ManyToManyField(Tag)
text = models.TextField()
Run Code Online (Sandbox Code Playgroud)
我已经创建了一些非常基本的测试,只是为了它的地狱:
class EntryTests(TestCase):
def testEntryFields(self):
user1 = User.objects.create_user('xs', 'ln@gmail.com', 'pw')
user1.last_name = 'H'
user1.save()
now = timezone.now()
entry1 = Entry(title="Title", author=user1, pubdate=now, text="Hello")
entry1.save()
tag1 = entry1.tags.create(name="testtag")
tag1.save()
self.assertEqual(entry1.title, "Title")
self.assertEqual(entry1.pubdate, now)
self.assertEqual(entry1.text, "Hello")
self.assertEqual(entry1.author, user1)
self.assertEqual(entry1.tags.all()[0], tag1)
self.assertEqual(tag1.name, "testtag")
Run Code Online (Sandbox Code Playgroud)
这通过了,但正如您所看到的,我不得不做一些奇怪的体操(生成所有条目的列表,并获取该列表中的第一个也是唯一的条目)来测试 上的相等性entry1.tags。有没有更好的方法来用 Django 做到这一点?
我不确定我是否理解您要测试的内容与 Django 模型的正常行为之间有什么区别...
但是对于该断言来说,简单的字段查找不是更好吗?
https://docs.djangoproject.com/en/dev/topics/db/queries/
self.assertEqual(entry1.tags.get(pk=tag1.pk), tag1)
Run Code Online (Sandbox Code Playgroud)
此外,django 的单元测试中还有一些自定义断言:
assertQuerySetEqual可能更适合使用.all或.filter
| 归档时间: |
|
| 查看次数: |
4273 次 |
| 最近记录: |