Cli*_*iff 2 django tdd assertions
所以我正在学习如何在Django中练习TDD,我遇到了一些小问题.我创建了一个自定义用户对象,该对象以一对一的关系链接到经过身份验证的系统用户.我有以下测试,它练习我的自定义用户类的一部分:
def test_creating_a_user_with_attributes(self):
myuser = Myuser.objects.create_user('Gary', email='me@email.com')
current_time = now()
myuser.birthday = current_time
myuser.save()
first_user = Myuser.objects.all()[0]
self.assertEqual(first_user.birthday, current_time, 'first_user.birthday should be equal to the current_time')
Run Code Online (Sandbox Code Playgroud)
问题是我的测试失败了,我无法立即看到原因.断言失败报告了我提供的消息,我感到困惑,因为我确定生日被设置为现在的值.我最终不得不重构我的断言以使失败的值清楚.
self.assertEqual(first_user.birthday, current_time,
'first_user.birthday ' + str(first_user.birthday) + ' should equal ' + str(current_time))
Run Code Online (Sandbox Code Playgroud)
这表明生日是日期字段而不是日期时间字段.我的问题是,是否存在一些替代形式的断言,它将预期值和实际值转储为失败消息的一部分,或者我是否在某种程度上滥用或误解了API?
Django没有实现assertEqual,它只是使用Python的unittest模块.
您需要的是为您的测试用例类设置longMessage属性True,如下所示:
class VerboseTestCase(TestCase):
longMessage = True
def test_creating_a_user_with_attributes(self):
myuser = Myuser.objects.create_user('Gary', email='me@email.com')
current_time = now()
myuser.birthday = current_time
myuser.save()
first_user = Myuser.objects.all()[0]
self.assertEqual(first_user.birthday, current_time, 'first_user.birthday should be equal to the current_time')
Run Code Online (Sandbox Code Playgroud)
如果测试失败,将输出类似的内容:
AssertionError: <datetime 1> != <datetime 2> : first_user.birthday should be equal to the current_time
Run Code Online (Sandbox Code Playgroud)
这在Python的unittest docs中有解释.
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |