web-dev-qa-db-ja.com

単体テストでの印刷出力の抑制

編集:使用していることに注意してくださいPython 2.6(タグ付き)

私が持っているとしましょう:

class Foo:
    def bar(self):
        print 'bar'
        return 7

そして、私は次のユニットテストを持っていると言います:

import unittest
class ut_Foo(unittest.TestCase):
    def test_bar(self):
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)

だから私が実行した場合:

unittest.main()

私は得る:

bar # <-- I don't want this, but I *do* want the rest
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Exit code:  False

私の質問は、ユニットテストフレームワークの出力を取得しながら、テスト対象のオブジェクトの出力を抑制する方法はありますか?

編集この質問は フラグ付き質問 の複製ではありません。 pythonスクリプト。

この質問は、ユニットテストの実行中にpythonスクリプトの通常のstdoutを非表示にすることについて尋ねていますが、それでもunittest stdoutを表示したいのですが、私のstdoutを無効にしたくありません。テスト済みのスクリプト。

19
asherbar

オプション「-b」を使用してユニットテストを呼び出します-バッファstdoutおよびstderr

Foo.py

class Foo:
    def bar(self):
        print "bar"
        return 7

test.py

import unittest
from Foo import Foo

class test_Foo(unittest.TestCase):
    def test_bar(self):
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)

if __name__ == "__main__":
    unittest.main()

-bオプションを指定して実行します

$ python test.py -b
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

別の方法:noseを使用する

$ pip install nose

コマンドをインストールするものnosetests

testのデフォルトのテスト検出ルールを満たすために、クラスとメソッドのプレフィックスがnoseになるようにテストスイートを変更したことに注意してください。

nosetestsは、デフォルトでは出力を表示しません

$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

出力を確認したい場合は、-sスイッチを使用してください。

$ nosetests -s
bar
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
21
Jan Vlcinsky