2012-08-29 7 views
27

現在、モックライブラリを使ってPythonで基本的なnose unittestを書くことを試みています。nosetestsを使ってモックパッケージをPythonカバレッジレポートから除外する方法

いくつかの基本的な例を終えた後、私はnosetests --with-coverageを使用しようとしましたが、モックパッケージと私はモックアウェイを試みたパッケージがカバレッジレポートに表示されます。これらを排除する可能性はありますか?

from imaplib import IMAP4 

class ImapProxy: 
    def __init__(self, host): 
     self._client = IMAP4(host) 

そして、テストケース: 私は今nosetests --with-coverage

. 
Name   Stmts Miss Cover Missing 
------------------------------------------ 
ImapProxy  4  0 100% 
imaplib  675 675  0% 23-1519 
mock   1240 810 35% [ a lot of lines] 
ための次のような出力を得るモック輸入パッチ

from ImapProxy import ImapProxy 

class TestImap: 
    def test_connect(self): 
     with patch('ImapProxy.IMAP4') as imapMock: 
      proxy = ImapProxy("testhost") 
      imapMock.assert_called_once_with("testhost") 

からここ

は、私がテストしたいクラスがあります

モックパッケージを除外する方法はありますか? imaplibパッケージを手動で私は今、.coveragercファイルについては、そのためのおかげで知ってネッドBatchelderへ--cover-package=PACKAGE

おかげですべてが、これらのパッケージをホワイトリストすることなく!

私は以下の内容を.coveragercファイル作成:今、カバレッジ・レポートのモックのための私の出力がある

[report] 
omit = *mock* 

を:

mock      1240 1240  0% 16-2356 

それはもはやモックパッケージをカバーしていませんが、まだ報告書にそれを示しています。

私は、これが助けになる場合は、Coverage.py、バージョン3.5.2を使用します。

+0

'--cover-erase'で以前のデータを消去してみます。 – xbello

答えて

30

レポートにしたくないものを除外し.coveragercファイルを作成します。[run]セクションへ[report]セクションからごomitエントリを移動し、あなたの.coveragercでhttp://nedbatchelder.com/code/coverage/config.html

+0

あなたは私を一歩近づけました。 –

+0

私は質問に追加した情報を見ていただけますか?私はそれが私の側でエラーであるか、[report]ブロックでの省略が正しく機能していないかどうかはわかりません。 –

+3

私は同様の問題に直面しており、インクルージョンと省略を含む 'coveragerc'ファイルを作成しました。しかし、ノーズはそれを考慮していないようで、(cover_pylibがコンフィギュレーションファイルで 'False'に設定されているにもかかわらず)Pythonのすべてのライブラリでカバレッジを実行するようになります。どのようにcoveragercを鼻で動作させるか考えてみましょうか? – Boris

14

を。

+0

正確に。 '[report]'はファイルごとの報告を抑止しますが、%計算は変更しません。 '[実行]'は私のために働く。 – cdunn2001

1

私のメインパッケージディレクトリ内で一連のサブパッケージをテストするのと同様の状況がありました。私はnosetestsを私のモジュールのトップディレクトリから実行しました。Mockと他のライブラリがカバレッジレポートに含まれていました。 nosetestsに--cover-module my_packageを使ってみましたが、サブパッケージは含まれていませんでした。次のコマンドを実行し

は私の問題を解決しました:

nosetests --with-coverage --cover-erase --cover-package ../my_package 

だから、あなたがテストしたい場合、すべてのコードが同じディレクトリにある、あなたが指定することにより、単独でのカバレッジを得ることができますモジュールパスはnosetestsになります。これにより、各サブモジュールを個別にホワイトリストする必要がなくなります。

(Python 2.7.6、カバレッジ4.0.3、ノーズ1.3.7)

関連する問題