在Python单元测试中测试stdout
大家好,过去一周我一直在练习单元测试,尝试不同的场景。我意识到单元测试的重要性,想尽可能熟悉它们。下面是一个基本的倒计时器。我想测试在While循环结束后显示的输出。这里是我想测试的代码。
Timer = 11
while Timer > 0:
Timer = Timer - 1
print(Timer)
print("Times Up!")
这是我为一个简单的“你好,世界”程序使用的测试套件,但它没有成功。我猜是因为在while循环中有一些输出。所以我该如何只测试“时间到!”这个输出呢?
import unittest
import sys
import io
from PopListTestView4 import *
class UnitTest(unittest.TestCase):
def test_Output(self):
saved_stdout = sys.stdout
try:
out = io.StringIO()
sys.stdout = out
output = out.getvalue().strip()
assert output == 'Times up!'
finally:
sys.stdout = saved_stdout
if __name__ == "__main__":
suite = unittest.TestLoader().loadTestsFromTestCase(UnitTest)
unittest.TextTestRunner(verbosity=2).run(suite)
1 个回答
2
assert output.endswith('Times up!')
这行代码的意思是:检查变量output的内容是不是以“Times up!”结尾。如果不是,程序会报错,表示这个条件没有满足。
str.endswith
是Python文档中的一个函数,具体说明可以查看这里: https://docs.python.org/2/library/stdtypes.html#str.endswith