30

私は現在、モックライブラリを使用して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を使用します。

4

3 に答える 3

32

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

于 2012-08-30T14:18:37.853 に答える
14

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

于 2013-05-07T19:00:09.583 に答える
2

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

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

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

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

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

于 2016-03-02T09:57:39.053 に答える