首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3 UnitTests:如何打印输出

Python3 UnitTests:如何打印输出
EN

Stack Overflow用户
提问于 2017-05-19 17:01:29
回答 1查看 6.7K关注 0票数 1

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

下面是我的代码片段:

代码语言:javascript
复制
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()

我运行我的代码使用:

代码语言:javascript
复制
python \interpreter.py

当单元测试运行时,lexer()中的print()语句将被忽略。当测试用例失败时,这是令人沮丧的,而且我没有打印语句来分析。在调试时,我不希望注释掉单元测试,而是编写一个只为它们的print语句运行测试的对应函数。如何使打印语句打印出来?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-27 19:28:09

单元测试并行运行,因此不能依赖print函数,因为它不是线程安全的。相反,可以使用记录器,或者更好地将自定义消息传递给assert方法。

代码语言:javascript
复制
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)) 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44075404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档