ska*_*kaz 27 python django validation unit-testing
我是相对较新的Python,并希望使用assertRaises测试来检查ValidationError,哪个工作正常.但是,我有很多ValidationErrors,我想确保返回正确的.我想我可以传递一些东西,assertRaises但它看起来不像我可以,所以我想我会做一个assertTrue并检查异常消息.但是,我不知道如何访问它.这是解决这个问题的好方法吗?谢谢.
class DailyEntriesTests(TestCase):
def test_cant_have_ip_and_user(self):
u = createUser(False)
de = createDailyEntry(u, "1.1.1.1", 1)
with self.assertRaises(ValidationError) as cm:
de.full_clean()
# this line bombs - message doesn't exist. I also tried "error_code" like I saw in the documentation, but that doesn't work
print(cm.exception.message)
self.assertTrue(cm.exception.message.contains("Both"))
Run Code Online (Sandbox Code Playgroud)
Lou*_*uis 34
你可以使用assertRaisesRegexp.
with self.assertRaisesRegexp(ValidationError, "Both"):
de.full_clean()
Run Code Online (Sandbox Code Playgroud)
当您将其用作上下文管理器时,第二个参数是一个正则表达式,用于搜索异常的字符串表示形式.
现在您可以assertRaises用作上下文管理器.这样,您可以捕获异常并在以后检查它.
with self.assertRaises(SomeException) as cm:
do_something()
the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)
Run Code Online (Sandbox Code Playgroud)
由于该问题与Django有关,因此assertRaisesMessage在继承django的TestCase时也可以使用上下文管理器.
from django.test import TestCase
class ExceptionTest(TestCase):
def test_call_raises_exception_with_custom_message(self):
with self.assertRaisesMessage(Exception, 'My custom message!'):
call_that_causes_exception()
Run Code Online (Sandbox Code Playgroud)
注:该assertRaisesMessage经理做的例外消息的"在"查找.因此,如果您的异常引发"我的自定义消息!" 你甚至可以断言"自定义信息".如果你已经定义了多个返回类似消息的异常,请记住这一点(例如,上面的测试也会传递消息,如"我的自定义消息!这里有一些进一步的细节."这可能不是理想的结果).
| 归档时间: |
|
| 查看次数: |
9667 次 |
| 最近记录: |