我有一些代码正在尝试为其编写单元测试。
这是我的功能:
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/