我正在尝试对一些正则表达式定义进行一些单元测试。
x = "TEST TEST TEST. Regular Expressions. TEST TEST TEST"
def find_start_end(phrase,sample_set):
m = re.search(phrase, sample_set)
start = m.start()
end = m.end()
return (start,end)
#print(start,end)
if __name__ =="__main__":
print(find_start_end("Regular Expressions", x))
这将返回 (16,35)....
我的测试单元是......
import unittest
class TestAlpha(unittest.TestCase):
def test_1(self):
x = "Regular Expressions"
self.assertEqual((0, 19), find_start_end("Regular Expressions", x))
def test_2(self):
x = "TEST TEST TEST. Regular Expression. TEST TEST TEST"
self.assertRaises(AttributeError, find_start_end("Regular Expressions", x))
if __name__ == "__main__":
unittest.main()
测试 1 顺利通过,我的问题是 test_2 如何测试 AttributeError: 'NoneType' object has no attribute 'start'
。
我试图使用assertRaises
,但我不确定我做错了什么。我愿意接受任何更好的建议。只是想弄清楚如何测试 NoneType
。我对正则表达式非常陌生。
最佳答案
代码使用 TestCase.assertRaises
方法不对。
替换以下行:
self.assertRaises(AttributeError, find_start_end("Regular Expressions", x))
与:
# Do not call `find_start_end` directly,
# but pass the function and its arguments to assertRaises
self.assertRaises(AttributeError, find_start_end, "Regular Expressions", x)
或者:
# Use assertRaises as context manager
with self.assertRaises(AttributeError)
find_start_end("Regular Expressions", x)
关于Python 正则表达式单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953802/