2009-11-10 15 views
16

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

は、警告が印刷されたが、失敗としてカウントされません。私たちは私たちのコードは警告を生成したくないので、私はこのような状況がOKになりたくない

[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 

ありがとうございます!

編集:私が好きなものを理想的に は、各試験の前にwarnings.simplefilter('error')を発行する(そしてその後それをクリーン)nosetestsコマンドラインオプションです。

テストコードでwarningsモジュールを使用することを含むすべての解決策は、この点を克服するようです。警告をエラーに変換するために、各テストモジュールを手動で編集する必要はありません。さらに、私は、各テストモジュールの作成者が警告エラーを「オンにする」ことを忘れることを望んでいません。

+0

あなたは、標準エラー出力を読み、解析する[鼻プラグイン](http://nose.readthedocs.org/en/latest/plugins/interface.html)を書くことができるかもしれません。 – dbn

答えて

0

ノーズがこれを直接制御できるとは限りません。警告が出されたときに警告モジュールは例外を発生しません。 warningsモジュールは、どの警告を例外として発生させるべきかを制御します。

+0

まあ、鼻はできませんが、キンセンのトリックはできません。 Btw。、「PYTHONWARNINGS =エラーのnosetests ...」 –

9

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

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

PYTHONWARNINGS=error nosetests test/test_*.py --pdb 
+0

驚くべきことに、それは複雑な実行でも正しいことをします。'nosetests -vx tests/*。py --pdb' –

3

それが発行した場合@khinsenによって答えは、多くのことができますが、nosetestsの実行が停止します"ImportWarning:ディレクトリ 'XXX'をインポートしていません:__init__.py

さらに、モジュールのインポート中に警告が発生しました(これは、ユーザーが表示されていない警告です)。テスト)はエラーとして扱われるべきではありません。

私はgithubのを見つけることができるプラグインを、書面での@ DBWのアドバイスに従う:https://github.com/Bernhard10/WarnAsError

configureoptions機能にWarnAsError

次のプラグイン鼻は、プラグインがprepareTestRunnerを実装し、それが置き換えられます別のrunメソッドを持つクラスによってデフォルトのテストランナー:

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

このクラスは、元のテストランナーを格納し、そのrun方法 - は、ORIを呼び出しますTestRunnerの実行方法は、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) 
+1

インストールと使い方の指示はありますか? –

関連する問題