python - 测试 ManyToManyField 的最佳方法

标签 python django

我在为 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()

我已经创建了一些非常基本的测试,只是为了它的纯粹 hell :

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")

这通过了,但如您所见,我不得不做一些奇怪的体操(生成所有条目的列表并获取该列表中的第一个也是唯一的条目)来测试 entry1.tags。有没有更好的方法可以用 Django 做到这一点?

最佳答案

我不确定我是否理解您要测试的内容与 Django 模型的正常行为之间的区别...

但是对于该断言,简单的字段查找不是更好吗?

https://docs.djangoproject.com/en/dev/topics/db/queries/

self.assertEqual(entry1.tags.get(pk=tag1.pk), tag1)

此外,django 的单元测试中还有一些自定义断言: assertQuerySetEqual使用 .all.filter

时可能更合适

关于python - 测试 ManyToManyField 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16044668/

相关文章:

python - 无法打开文件 "django-admin.py": No such file or directory -- Mac OSX

python - 如何使用pyqt获取表中的选定项目?

python - 寻找更好的 python Google Calendar API 示例

未定义 Python 全局名称 'urls' 问题

python - 检查对象是否存在

python - 有没有像 Django 的 XAMPP 这样的一体化软件包?

python - Pandas 不根据条件选择列

Python:让 scipy 使用 numpy.float128 而不是 numpy.float64?

解析url中特殊字符的Django问题

django - 如何根据当前请求更改 django 设置?