fileinput.input的单元测试

问题描述 投票:1回答:1

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

这是我拥有的功能:

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

[我的目的是使此函数与作为参数传递的未指定数目的文件或与stdin一起使用,因此fileinput似乎是实现此目的的好方法。

但是,我不知道如何为此编写单元测试,主要是因为我不知道如何通过此功能“ fake”输入。

我已经尝试过使用模拟补丁并打开一个伪造的文件,但是似乎无法正确地传递给该函数。我还尝试过使用模拟补丁来欺骗sys.argv[1],但是那只能让我欺骗文件名,而不是内容。

为了进行单元测试,有什么好方法可以使此功能欺骗接收虚假的输入?

python unit-testing
1个回答
0
投票

您说过,该代码还没有最终定型,所以我将只关注有关如何传递“假输入”的部分。一个通常有用的技巧是将执行计算的代码部分与与其他代码/库/ 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的任何类型的输入来为其提供“伪输入”。

© www.soinside.com 2019 - 2024. All rights reserved.