【发布时间】:2015-05-15 12:17:31
【问题描述】:
我有一个基于函数的程序,它在函数内部接受用户输入,而不是函数之前的参数:例如,假设我的函数是
def my_function():
a = input("a: ")
b = input("b: ")
print(a+b)
据我目前对单元测试的了解,这样的函数比像这样工作的函数更难单元测试:
def another_function(a,b):
return(a+b)
那么,例如,我该如何测试一个看起来像 my_function 的函数呢?感觉好像只要输入不正确的输入并检查错误就可以很容易地手动测试,但是我必须编写一个测试套件来自动测试我的所有功能。
【问题讨论】:
-
您可以修补
input以提供您想要的任何值,或者在函数定义中设置input=input并手动注入一些东西来替换内置的input(参见例如this code I用后一种方法测试)。 -
啊,好吧,所以我可以创建一个预定义变量“a”的测试方法/函数,以便在测试套件中使用它?例如,它可以断言 print("papajohn") 是否等于 my_function(),其中“papa”为 a,“john”为 b?
-
不是真的,你还需要在你的情况下修补
print,因为你的函数不会返回任何东西(或者,更好,将它们重组为return和print其他地方)。你需要有一个模拟stdout然后确保你期望的文本被传递给它。 -
好的,故事的寓意是你不能真正测试没有返回值的函数?
-
当然要困难得多!至少在 Python 3 中,
print是一个函数,它比 Python 2 更轻松。
标签: python unit-testing python-3.x