python - Django 模型中的单元测试外键约束

标签 python django validation unit-testing

我定义了 2 个模型,其中一个通过外键关系引用另一个模型。我想编写单元测试来确保这种关系。

class X(models.Model):
    name = models.CharField(unique = True)

class Y(models.Model):
    event = models.ForeignKey(X)

在测试中我有

class TestY(TestCase):
    x = X.objects.create(name="test1")
    x.save()
    y = Y(event=X.objects.create(name="test2"))
    with self.assertRaises(ValidationError):
        if y.full_clean()
            y.save()

    self.assert(0,Y.objects.filter(event__name="test2").count)

这表示测试失败,未引发ValidationError

此外,如果字段不允许为空,我应该如何测试 ValueError 。 self.assertRaises(ValueError) 不起作用。

最佳答案

你想要这样的东西吗?

class TestY(TestCase):

    def test_model_relation(self):
        x = X.objects.create(name="test1")
        y = Y(event=X.objects.create(name="test2"))
        y.full_clean()  # `event` correctly set. This should pass
        y.save()
        self.assertEqual(Y.objects.filter(event__name="test2").count(), 1)

    def test_model_relation__event_missing(self):
        x = X.objects.create(name="test1")
        y = Y()  # Y without `event` set
        with self.assertRaises(ValidationError):
            y.full_clean()
            y.save()
        self.assertEqual(Y.objects.filter(event__name="test2").count(), 0)

顺便说一句,您应该在测试方法(名称以 test 开头的方法)中指定 test,而不是在类主体中。

关于python - Django 模型中的单元测试外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972430/

相关文章:

javascript - 严格的数字输入字段

python - 在 python 中计算快速对数基数 2 上限

python - 更改一个列表会更改另一个列表

Django/Stripe : idempotent requests can only be used with the same parameters

python - django 6 1.10.0没有名为http_client的模块错误

regex - 如何编写正则表达式来验证逗号分隔的值列表

python - Emacs 中的 Rope 和 Yasnippet

python - 使用节点行和列位置的字典将 Pandas 边列表转换为稀疏转换矩阵?

javascript - 两个不同的ajax url返回相同的数据

C 程序验证错误和跳过用户输入