Python 正则表达式单元测试

标签 python regex unit-testing

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

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/

相关文章:

python - 使用 RPM 包与使用 requirements.txt 管理依赖关系

php - 字符串中的数字词转化为数字

angular - 为使用 mat-autocomplete 的组件编写单元测试

c# - 我如何单元测试 URL 在 c# 中是否有效?

python - resource 可选参数,用于检索 Flask Restful 上的所有数据

python - 使用sklearn时Python出现内存错误

python - 找出一个点是否位于点云的凸包中的有效方法是什么?

Java - 将字符串转换为数字的想法(正则表达式/解析/等)?

regex - 正则表达式替换

python - 类型错误 : ModelBase object got multiple values for keyword argument