Dip*_*iya 0 python python-3.x python-unittest
请检查以下代码:
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()
Run Code Online (Sandbox Code Playgroud)
在输出中,我收到以下测试消息test_fails:
AssertionError:“^我的消息$”与“'我的消息'”不匹配
我缺少什么?
正如评论中提到的,这些是我的问题:
'^my message$'有效的正则表达式吗?exactly 'my message'?如果仔细检查AssertionError,您会发现该assertRaisesRegex方法实际上正在尝试将您的模式与 进行匹配'my message',包括引号。
这是因为,从 docs 来看,该方法是针对引发的异常的字符串表示形式进行模式匹配的,您可以通过自己执行字符串转换来看到:
>>> str(KeyError('my message'))
"'my message'"
Run Code Online (Sandbox Code Playgroud)
通过修复正则表达式中匹配的起点和终点,您将导致此断言失败。前两种情况按预期工作,因为它们不受字符串表示形式中存在引号的影响。
| 归档时间: |
|
| 查看次数: |
7700 次 |
| 最近记录: |