import unittest
def fn():
raise KeyError('my message')
class Test(unittest.TestCase):
def test_passes(self):
with self.assertRaisesRegex(KeyError, 'my message'):
fn()
with self.assertRaisesRegex(KeyError, 'my'):
fn()
def test_fails(self):
# Why does this test fail?
# Isn't '^my message$' a valid regex?
# How do I check if the message is exactly 'my message'?
with self.assertRaisesRegex(KeyError, '^my message$'):
fn()
unittest.main()
上述代码的测试在执行 test_fails 时出现报错:
AssertionError: "^my message$" does not match "'my message'"
因为在正在匹配的时候,会包含引号,具体的可以通过以下方式来查看具体的 message
>>> str(KeyError('my message'))
"'my message'"
处理方式:代码改为以下方式即可使用
import unittest
def fn():
raise KeyError('my message')
class Test(unittest.TestCase):
def test_passes(self):
with self.assertRaisesRegex(KeyError, 'my message'):
fn()
with self.assertRaisesRegex(KeyError, 'my'):
fn()
def test_fails(self):
# Why does this test fail?
# Isn't '^my message$' a valid regex?
# How do I check if the message is exactly 'my message'?
with self.assertRaisesRegex(KeyError, '^\'my message\'$'):
fn()
unittest.main()