web-dev-qa-db-ja.com

nosetestsを使用してpythonカバレッジレポートからモックパッケージを除外する方法

私は現在、モックライブラリを使用してPythonでいくつかの基本的なノーズユニットテストを作成しようとしています。

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

テストしたいクラスは次のとおりです。

from imaplib import IMAP4

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

そしてテストケース:モックインポートパッチから

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")

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]

モックパッケージとimaplibパッケージを除外する方法はありますかなし--cover-package=PACKAGEによってそれらのパッケージを除くすべてを手動でホワイトリストに登録する必要があります

Ned Batchelderのおかげで、.coveragercファイルについて知ることができました。ありがとうございます。

次の内容の.coveragercファイルを作成しました。

[report]
omit = *mock*

カバレッジレポートのモックの出力は次のとおりです。

mock                     1240   1240     0%   16-2356

モックパッケージはカバーされなくなりましたが、レポートには表示されます。

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

30
Frederick Roth

レポートに不要なものを除外する.coveragercファイルを作成します。 http://nedbatchelder.com/code/coverage/config.html

32
Ned Batchelder

.coveragercで、omitエントリを[report]セクションから[run]セクションに移動します。

14

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

以下を実行すると、私の問題は解決しました。

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

したがって、ifテストするすべてのコードが同じディレクトリにあります。thennosetestsへのモジュールパスを指定することで、それだけでカバレッジを取得できます。これにより、各サブモジュールを個別にホワイトリストに登録する必要がなくなります。

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

2