我有一些代码正在尝试编写单元测试。
这是我拥有的功能:
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]
,但是那只能让我欺骗文件名,而不是内容。
为了进行单元测试,有什么好方法可以使此功能欺骗接收虚假的输入?
您说过,该代码还没有最终定型,所以我将只关注有关如何传递“假输入”的部分。一个通常有用的技巧是将执行计算的代码部分与与其他代码/库/ 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
的任何类型的输入来为其提供“伪输入”。