2017-05-19 11 views
-2

を標準出力に印刷する私は(のpython3でいくつかのユニットテストが、印刷を実行している)が動作するようには思えません。ここでのpython3ユニットテスト:どのように

は、私のコードの抜粋です:

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 

ユニットテストを実行すると、レクサー内部のプリント()文は、()は無視されます。テストケースが失敗し、分析するための印刷ステートメントがない場合、これは不愉快です。私がデバッグだとき、私はむしろ、ユニットテストをコメントアウトし、もっぱら自分のprint文のテストを実行し、相手関数を記述していないと思います。印刷文を印刷するにはどうしたらいいですか?それはスレッドセーフではありませんので、あなたが印刷機能に依存することはできませんので

+1

はStackOverflowのへようこそ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。代わりに、あなたは*問題コードを削除し、*余分なコードを残しました。 – Prune

+1

あなたは関数には、印刷のものを持っている必要はありません。あなたが望むのは、単体テストに関数からの戻り値をチェックさせることです。プロダクションコードの実行中に戻り値を出力する他の関数を簡単に持つことができます。ユニットテストを実行している間に印刷することは、いいえです。 – quamrana

+1

これにロギングモジュールを使用できます。 はこれが助けることができるかもしれませ - https://stackoverflow.com/questions/284043/outputting-data-from-unit-test-in-python – Shashank

答えて

0

ユニットテストを並行して実行します。代わりにロガーを使用するか、カスタムメッセージを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)) 
関連する問題