python - fileinput.input 的单元测试

标签 python unit-testing

我有一些代码正在尝试为其编写单元测试。

这是我的功能:

def sanitize_text():
    total_text = []

    # Regex split to strip non-alphanumeric characters
    for line in fileinput.input():
        line.casefold()
        words = [x for x in re.split("\W",line) if x]
        total_text += words

    return total_text

我的目的是让这个函数处理作为参数传入的未指定数量的文件,或者使用标准输入,因此 fileinput 似乎是一个很好的方法。

但是,我不知道如何为此编写单元测试,主要是因为我不知道如何传递这个函数“假”输入。

我尝试使用模拟补丁并打开一个假文件,但它似乎没有正确传递给函数。我还尝试过使用模拟补丁来欺骗 sys.argv[1],但这只能让我欺骗文件名,而不能欺骗内容。

为了进行单元测试,有什么好方法可以欺骗这个函数接受虚假输入?

最佳答案

你说这段代码还没有最终成形,所以我将只关注关于如何传递“假输入”的部分。一个常用的技巧是将执行计算的代码部分与与其他代码/库/IO 交互的部分分开:

def add_sanitized_line(text, line):
    line.casefold()
    # Regex split to strip non-alphanumeric characters
    words = [x for x in re.split("\W",line) if x]
    text += words

这个函数可以很好地进行单元测试,而不需要模拟。您可以通过为 line 传递您认为必要的任何类型的输入来为其提供“假输入”。

关于python - fileinput.input 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143603/

相关文章:

angularjs - 如何在模块配置中模拟提供程序/配置以进行单元测试

C# 编译器错误 CS0433

java - PowerMockito : doThrow unfinished stubbing

python - 无法在 screen 上运行 .py 脚本

python - 使用 gcloud python api 获取实例图像名称

python - 从 B 的所有元素中减去数组 A 的所有元素?

unit-testing - 在新窗口中运行每个单元测试

python - 用最后 2 个空格拆分字符串

python - 计算网格框中的点

python - 单元测试 python how tos