簡體   English   中英

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()語句。 當測試用例失敗並且我沒有要分析的打印語句時,這令人沮喪。 在調試時,我不想注釋掉單元測試,而是編寫一個對等函數,僅對它們的打印語句運行測試。 如何使打印報表打印出來?

單元測試並行運行,因此您不能依賴打印功能,因為它不是線程安全的。 請改用記錄器,甚至更好地將自定義消息傳遞給assert方法。

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)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM