私は現在、モックライブラリを使用して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を使用します。
レポートに不要なものを除外する.coveragercファイルを作成します。 http://nedbatchelder.com/code/coverage/config.html
.coveragercで、omit
エントリを[report]
セクションから[run]
セクションに移動します。
メインパッケージディレクトリ内の一連のサブパッケージをテストする同様の状況がありました。モジュールのトップディレクトリ内から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)