Python单元测试。测试打印动态数据的方法
我对python中的单元测试(以及一般的测试)非常陌生。我编写了一个简单的控制台应用程序,它为用户提供了多个选项,用户可以通过输入一个数字(1-15)来选择这些选项,并且我有一个功能,一旦检查了输入,就会将响应打印到屏幕上。除了响应根据用户的选择而变化外,响应还取决于文本文件中保存的数据,因此可能会发生变化 我如何测试这样的函数Python单元测试。测试打印动态数据的方法,python,unit-testing,testing,Python,Unit Testing,Testing,我对python中的单元测试(以及一般的测试)非常陌生。我编写了一个简单的控制台应用程序,它为用户提供了多个选项,用户可以通过输入一个数字(1-15)来选择这些选项,并且我有一个功能,一旦检查了输入,就会将响应打印到屏幕上。除了响应根据用户的选择而变化外,响应还取决于文本文件中保存的数据,因此可能会发生变化 我如何测试这样的函数 谢谢规范的解决方案是重构函数,以便 1/它将可能的输出集作为参数,而不是从文件(或数据库或其他任何地方)读取它们,并使调用方负责传递此参数 2/它返回一个响应,而不是将
谢谢规范的解决方案是重构函数,以便 1/它将可能的输出集作为参数,而不是从文件(或数据库或其他任何地方)读取它们,并使调用方负责传递此参数 2/它返回一个响应,而不是将其打印到stdout,并使调用方负责打印到stdout 脑死的例子: 在…之前
def print_response(choicenum):
fname = "response-{}.txt".format(choicenum)
with open(fname) as f:
data = f.read().splitlines()
print data[choicenum]
def main():
choicenum = int(raw_input("choose a number"))
print_response(choicenum)
在.py之后
def get_reponse(choicenum, choices):
return choices[choicenum]
def read_responses_file(choicenum):
fname = "response-{}.txt".format(choicenum)
with open(fname) as f:
return f.read().splitlines()
def main():
choicenum = int(raw_input("choose a number"))
choices = read_responses_file(choicenum)
print get_response(choicenum, choices)
它仍然不是完美的wrt/可测试性(
read\u response\u file()
仍然依赖于文件系统,这使得它很难进行统一测试,main
仍然直接打印到stdout,这可以通过模拟sys.stdout
进行测试),但至少“域”部分(get\u response()
)与文件系统和标准输出都解耦。您为它提供已知的输入,并期望得到已知的输出。它依赖的东西越多,你必须提供的东西就越多(尽管有时你可以重新设计,这样它就不再依赖它们了)