カバレッジというのはテストがテスト対象のコードをどれだけ網羅しているかをコード全体に対する割合で表したものをいう。
この数値を確認することで、そのコードがどれだけテストされているのかを把握できる。
カバレッジと一口に言っても C0 とか C1 とか色々あるみたいだけど、今回は特に気にしない。
Python には coverage というライブラリがあり、これでカバレッジを計測できる。
Nose はユニットテスト用のライブラリで、これは coverage と組み合わせて使うことができる。
例として Nose を使ってユニットテストを書いているプロジェクトがあるので、それを使う。
プロジェクトを GitHub からチェックアウトする。
$ git clone https://github.com/momijiame/cmonkey.git $ cd cmonkey
$ mkvirtualenv sandbox $ pip install -r requirements.txt -r test-requirements.txt $ pip install coverage
$ nosetests --with-xunit --with-coverage --cover-erase --cover-package=cmonkey --verbose cmonkey.cmd.tests.Test_Main.test_exec_error_invalid_param ... ok cmonkey.cmd.tests.Test_Main.test_get_client_cookie ... ok cmonkey.cmd.tests.Test_Main.test_get_client_default ... ok cmonkey.cmd.tests.Test_Main.test_get_client_integration ... ok cmonkey.cmd.tests.Test_Main.test_get_client_signature ... ok cmonkey.cmd.tests.Test_Main.test_parse_default_cookie ... ok cmonkey.cmd.tests.Test_Main.test_parse_default_signature ... ok cmonkey.cmd.tests.Test_Main.test_parse_error_invalid_t ... ok cmonkey.cmd.tests.Test_Main.test_parse_error_required_a ... ok cmonkey.cmd.tests.Test_Main.test_parse_error_required_p ... ok cmonkey.cmd.tests.Test_Main.test_parse_error_required_s ... ok cmonkey.cmd.tests.Test_Main.test_parse_error_required_u ... ok cmonkey.tests.Test_CookieClient.test_login_digest ... ok cmonkey.tests.Test_CookieClient.test_login_no_digest ... ok cmonkey.tests.Test_CookieClient.test_request ... ok cmonkey.tests.Test_IntegrationClient.test_request ... ok cmonkey.tests.Test_SignatureBuilder.test_build ... ok cmonkey.tests.Test_SignatureBuilder.test_contains_slash ... ok cmonkey.tests.Test_SignatureClient.test_request ... ok ---------------------------------------------------------------------- XML: nosetests.xml Name Stmts Miss Cover Missing ------------------------------------------- cmonkey 96 8 92% 43, 46-49, 61, 82-83 cmonkey.cmd 112 21 81% 24-37, 46-48, 246-250, 253 ------------------------------------------- TOTAL 208 29 86% ---------------------------------------------------------------------- Ran 19 tests in 0.152s OK
$ coverage html --include 'cmonkey/*' --omit '*/tests/*' $ open htmlcov/index.html