Skip to main content
 首页 » 编程设计

Python 正则表达式单元测试

2024年08月28日39lonelyxmas

我正在尝试对一些正则表达式定义进行一些单元测试。

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)