
Pythonの標準でインストールされている単体テストフレームワークの『unittest』にはカバレッジを取得する機能がありません。
今回、『coverage』というパッケージをインストールすることで『unittest』でカバレッジを取得する方法を紹介します。
- coverageのインストール方法
- カバレッジレポートの出力方法
Contents
unittestでカバレッジを取得する前の準備
unittestは、Pythonインストール時点でインストールされているので改めてインストールする必要はありません。
coverageをインストール
coverageというパッケージをインストールします。
pip install coverage
unittestで単体テストコードを書く
unittestの本家を参考にunittestで単体テストを書いていきます。
test_unittest.pyというファイルを作成
test_unittest.pyというファイルに下記のソースコードを書きます。
ちなみにテスト用のファイルは、test_で始まることが多いです。
test_を目印にテストを実行するフレームワークが多い。また、人間が見てすぐに「テスト用のソースコードね」ってわかるためです。
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
unittestの実行
pythonコマンドでファイル名を指定することで実行できます。
python test_coverage.py
unittestの実行結果
$ python test_coverage.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
unittestでカバレッジを取得する
カバレッジを取得していきます。
単体テストを実行
coverageコマンドで単体テストを実行します。
coverage run test_coverage.py
coverageの実行結果
先ほど、unittestで実行した結果と変わりませんね。
$ coverage run test_coverage.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
カバレッジレポートを出力する
実行結果のレポートを出力します。
coverage report -m
カバレッジの取得結果
左から、Name(ファイル名)、Stmts(ステートメント数)、Miss(失敗数)、Cover(網羅率)となります。
ステートメントとは、実行可能なソースコードの行数です。
Name Stmts Miss Cover Missing
------------------------------------------------
test_coverage.py 14 0 100%
Python unittestでカバレッジを取得する方法のまとめ
『coverage』をインストールするだけで、カバレッジが取得できるようになりました。
ただ、2回コマンドを打たないとカバレッジが取得できないというのは非常にもどかしいです。
実行結果とカバレッジ両方が一気に取得できるフレームワークもあるので今後紹介できたらと思います。