Django模型中单元测试外键约束
我有两个模型,其中一个通过外键关系引用另一个。我想写单元测试来确保这个关系是正确的。
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)
这个方法不管用。
1 个回答
1
你想要这样的东西吗?
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
开头的方法),而不是在类的主体部分。