9

私は unittest を使用しており、各テストの後に「OK」、「エラー」、「失敗」を表す「.」、「E」、または「F」を出力します。どうすればオフにできますか? Python 2.7 を使用しており、これらの出力は組み込みのランナー クラスから取得されます。すべてネストされているため、クラスをオーバーライドするのは非常に難しいようです。

編集:文字 E のみを削除したい。および F は、私のテストで他のログと同時に表示されないためです。

4

3 に答える 3

12

の出力はunittest標準エラー ストリームに書き込まれ、別の場所にパイプできます。*nix ボックスでは、これは次のように可能です。

python -m unittest some_module 2> /dev/null

Windows では、これは次のようになります (Karl Knechtel に感謝):

python -m unittest some_module 2> NUL

Python からテストを実行する場合は、次のstderrようにストリームを簡単に置き換えることができます。

import sys, os

sys.stderr = open(os.devnull, 'w')

... # do your testing here

sys.stderr = sys.__stderr__ # if you still need the stderr stream

.、F、E シンボルの更新をオフにしたいだけなのでTestResult、デフォルトのクラスをオーバーライドして独自のクラスを作成することもできます。私の場合 (Python 2.6)、これは次のようになります。

import unittest

class MyTestResult(unittest._TextTestResult):
    def addSuccess(self, test):
        TestResult.addSuccess(self, test)
    def addError(self, test, err):
        TestResult.addError(self, test, err)
    def addFailure(self, test, err):
        TestResult.addFailure(self, test, err)

これにより、文字の印刷が効果的にオフになりますが、デフォルトの機能は維持されます。

ここで、新しいクラスも必要であり、メソッドTestRunnerをオーバーライドします。_makeResult

class MyTestRunner(unittest.TextTestRunner):
    def _makeResult(self):
        return MyTestResult(self.stream, self.descriptions, self.verbosity)

このランナーを使用すると、ログなしのテストを楽しむことができます。

残念ながら、これはコマンドラインからはできません。

于 2011-12-15T10:01:37.067 に答える
1

使用している単体テスト フレームワーク (標準、鼻など) に応じて、詳細度を下げる方法は複数あります。

python -m unittest -h
...
-q, --quiet      Minimal output
...
于 2011-12-15T10:01:03.080 に答える