无法弄清楚如何在 Django 中正确"断言"psycopg2.errors.NotNullViolation



我目前正在为我创建的模型创建一些测试。该测试正在检查first_nameNOT NULL约束是否对该字段有效。

应该检查object.save()方法是否失败。如果失败,则断言应该返回pass。

我的测试方法是这样的:

def test_tutor_fname_notnull(self):
'''
Test passes if first_name NOT NULL constraint is working. If first_name is missing, data should not be saved to DB and return false.
'''
stevie = Tutors(last_name='wonder',email='sboywonder@gmail.com',birth_day='1990-01-02') 
self.assertIs(stevie.save(), False)

断言失败,返回:

psycopg2.errors.NotNullViolation: null value in column "first_name" of relation "artsubjects_tutors" violates not-null constraint
DETAIL:  Failing row contains (1, null, wonder, sboywonder@gmail.com, 1990-01-02).

这意味着NOT NULL约束正在工作并且断言应该通过。但是这个断言实际上是失败的。

----------------------------------------------------------------------
Ran 1 test in 0.003s
FAILED (errors=1)
Destroying test database for alias 'default'...

关于我如何能更好地处理这个断言,以使它通过预期时,object.save()方法失败的任何想法?

您应该断言它引发了一个错误,.assertRaises(…)[Python-doc]:

from psycopg2.errors importNotNullViolation
# …
def test_tutor_fname_notnull(self):
'''
Test passes if first_name NOT NULL constraint is working. If first_name is missing, data should not be saved to DB and return false.
'''
stevie = Tutors(last_name='wonder',email='sboywonder@gmail.com',birth_day='1990-01-02') 
with self.assertRaises(NotNullViolation):
stevie.save()

通过使用this作为上下文管理器(使用with关键字),测试将捕获NotNullViolation,如果没有引发此类异常,则测试将失败。

相关内容

  • 没有找到相关文章

最新更新