Python3 单元测试:如何打印到标准输出

Python3 UnitTests: How to print to stdout out

我正在 运行Python3 进行一些单元测试,但 print() 似乎不起作用。

以下是我的代码片段:

import unittest

def lexer(line):
        ... #Lots of code and print statements here
    return tokens

class lexerBasicTestCases(unittest.TestCase):
    def Test1(self):
        test = "9+4"
        output = ["9", "+", "4"]
        self.assertEqual(lexer(test), output)   
    def Test2(self):
        test = "9 + 4"
        output = ["9", "+", "4"]
        self.assertEqual(lexer(test), output)   
    def Test2(self):
        test = "9    +  4"
        output = ["9", "+", "4"]
        self.assertEqual(lexer(test), output)   

def lexerBasicTestSuite():
    suite = unittest.TestSuite()
    suite.addTest(lexerBasicTestCases('Test1'))
    suite.addTest(lexerBasicTestCases('Test2'))
    suite.addTest(lexerBasicTestCases('Test3'))
    unittest.TextTestRunner(verbosity=2).run(suite)

#Main program
lexerBasicTestSuite()

我运行我的代码使用:

python \interpreter.py

当单元测试运行时,lexer() 中的print() 语句被忽略。当测试用例失败并且我没有要分析的打印语句时,这令人沮丧。当我调试时,我宁愿不注释掉单元测试并编写一个对应的函数,只对它们的打印语句进行 运行 测试。我怎样才能打印出打印语句?

并行进行单元测试 运行,因此您不能依赖打印函数,因为它不是线程安全的。请改用记录器,或者更好地将自定义消息传递给断言方法。

class lexerBasicTestCases(unittest.TestCase):
    def Test1(self):
        """
        Docstrings are printed in most test runners.
        """
        test = "9+4"
        expect = ["9", "+", "4"]
        failure_msg = 'lexer({0}) should return {1} but returned {2}'
        actual = lexer(test)
        self.assertListEqual(expect, actual, failure_msg.format(test, expect, actual))