我在Python中有这个简单的程序(hello.py
(:
name=input()
print("Hello " + name)
就这么简单,没有类,没有函数,什么都没有,只有一个输入和相应的输出。
我的目标只是创建test_hello.py
,一个用于hello.py
的测试文件。我花了几个小时在互联网上搜索,但我只找到了函数或方法的单元测试,而不是简单的输入和输出程序。有什么线索吗?提前非常感谢!
注意:堆栈溢出表明有一个答案:如何在python中使用nosetest/unittest断言输出? 但是这两个问题非常不同,我的代码中没有函数,并且有一个input()
。在"答案"中建议的代码位于函数内部,没有input()
。
最后,我想出了解决方案:
import unittest
import os
import subprocess
class TestHello(unittest.TestCase):
def test_case1(self):
input = "Alan"
expected_output = "Hello Alan"
with os.popen("echo '" + input + "' | python hello.py") as o:
output = o.read()
output = output.strip() # Remove leading spaces and LFs
self.assertEqual(output, expected_output)
def test_case2(self):
input = "John"
expected_output = "Hello John"
with os.popen("echo '" + input + "' | python hello.py") as o:
output = o.read()
output = output.strip() # Remove leading spaces and LFs
self.assertEqual(output, expected_output)
if __name__ == '__main__':
unittest.main()
我有两个测试用例:"Alan"必须打印"Hello Alan",John必须打印"Hello John"。
谢谢大家的线索!
我真的建议使用类或函数,但如果你坚持,那么你可以尝试在子进程中使用它并捕获输出
这可能会有所帮助