我目前正在为我创建的模型创建一些测试。该测试正在检查first_name
NOT 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
,如果没有引发此类异常,则测试将失败。