17

コマンドラインから実行する場合nosetests、「無視されない」警告をエラーとして扱うように指定するにはどうすればよいですか?

デフォルトでは、警告は出力されますが、失敗としてカウントされません。

[snip]/service/accounts/database.py:151: SADeprecationWarning: Use session.add()
  self.session.save(state)
[snip]/service/accounts/database.py:97: SADeprecationWarning: Use session.add()
  self.session.save(user)
............
----------------------------------------------------------------------
Ran 12 tests in 0.085s

OK

コードで警告を生成したくないので、この状況をOK.

ありがとう!

編集: 理想的には、warnings.simplefilter('error')各テストの前に a を発行する (そして後でクリーンアップする) ノーズテスト コマンド ライン オプションが必要です。

warningsテストコードでモジュールを使用することを含むソリューションは、ポイントを無効にするようです。各テスト モジュールを手動で編集して、警告をエラーに変換したくありません。さらに、各テスト モジュールの作成者が、警告エラーを「有効にする」ことを忘れないようにしたいと考えています。

4

3 に答える 3

12

nosetests小さな Python スクリプトです。エディターで開き-W error、最初の行の最後に追加します。これは、警告を例外に変換するように Python インタープリターに指示します。

さらに簡単なのは、Python 環境変数を使用して「警告をエラーとして扱う」フラグを挿入することです。

PYTHONWARNINGS=error nosetests test/test_*.py --pdb
于 2014-01-08T14:25:54.337 に答える
5

@khinsen による回答は非常に役立ちますが、テストの検出中に次の警告が発行されると (それ以外の場合はユーザーには表示されません)、nosetests の実行が停止します: "ImportWarning: Not importing directory 'XXX': missing__init__.py

さらに、モジュールのインポート中に発生した警告 (テスト中に発生した警告とは対照的に) は、エラーとして扱われるべきではありません。

@dbw のアドバイスに従ってプラグインを作成しました。プラグインは github にあります: https://github.com/Bernhard10/WarnAsError

ノーズ プラグイン WarnAsError

configureおよびoptions関数の次に、プラグインは を実装prepareTestRunnerし、デフォルトの TestRunner を別の実行メソッドを持つクラスに置き換えます。

def prepareTestRunner(self, runner):
    return WaETestRunner(runner)

このクラスは元の TestRunner を格納し、そのrun-Method は元の TestRunner の run メソッドを別の .xml で呼び出しますwarnings.simplefilter

class WaETestRunner(object):
    def __init__(self, runner):
        self.runner=runner
    def run(self, test):
        with warnings.catch_warnings():
            warnings.simplefilter("error")
            return self.runner.run(test)
于 2015-10-20T13:04:23.837 に答える
0

私は、nose がこれを直接制御できるとは思わない: warnings モジュールは、警告が発行されたときに例外を発生させない。このwarningsモジュールを使用すると、どの警告を例外として発生させるかを制御できます。

于 2009-11-10T16:51:55.227 に答える