如何测试初学者的Python程序(使用input(),或许用unittest)?
我在一门初学者的编程课上担任评分员,课程使用的是Python。虽然我自己的Python水平不高,但我想尝试自动化一些评分的工作。
在网上查找资料时,我发现了PyUnit这个测试工具,虽然它可能对我想做的事情来说有点复杂。
我遇到的问题是,我不太确定怎么把我想要的测试输入传递给学生的函数,因为他们还没有使用命令行参数,甚至还没有多个函数,而是通过input()
函数获取用户输入。
举个简单的例子:
#/usr/bin/python3.1
# A silly example python program
def main():
a = int(input("Enter an integer: "))
b = int(input("Enter another integer: "))
c = a+b
print("The sum is %d" % c)
if __name__ == '__main__'
main()
对于这个简单的例子,我该怎么写一个单元测试来检查不同输入的输出呢?(比如,如果我输入2和3,输出的字符串应该是“总和是5”)
8 个回答
2
如果你需要和命令行程序进行更复杂的互动,而不仅仅是用 echo
这个简单的命令,那么你可以考虑使用 expect
。
4
其实你没法对这个进行单元测试。写单元测试的时候,有一个要点就是你可能需要改变一下你的代码,这样才能方便测试。在这种情况下,你需要把输入的部分提取到一个单独的函数里,这样你就可以对这个函数进行修改。
def my_input(prompt):
return input(prompt)
def main():
a = int(eval(my_input("Enter an integer: "))
等等。现在你的测试可以对 myscript.my_input
进行修改,让它返回你想要的值。
8
编辑:之所以提这个,是因为这个例子不太适合单元测试(我想初学者可能会对这个限制感到困惑)
如果你只关心输出结果是否符合你的要求,那为什么不试试一些“简单”的bash命令呢?比如:
echo -e "2\n3" | python test.py | grep -q "The sum is 5" && echo "Success"
如果你在做像这样的简单程序,那么这个方法应该足够好,几乎不需要太多努力。