在Python单元测试中测试stdout

2 投票
1 回答
2168 浏览
提问于 2025-04-18 17:13

大家好,过去一周我一直在练习单元测试,尝试不同的场景。我意识到单元测试的重要性,想尽可能熟悉它们。下面是一个基本的倒计时器。我想测试在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

撰写回答