kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

カバレッジを計測する

テスト書いたらカバレッジも計測してみたい
この間なにかでPythonではCoverageというツールで計測できるというのを見た

pip installでインストールして

$ pip install coverage
...
Successfully installed coverage-4.5.2

coverage runでカバレッジを計測

$ coverage run test-shape.py
............................
----------------------------------------------------------------------
Ran 28 tests in 0.004s

OK

coverage reportでレポートを出力

$ coverage report
Name            Stmts   Miss  Cover
-----------------------------------
shape.py           67      3    96%
test-shape.py     130      0   100%
-----------------------------------
TOTAL             197      3    98%

100%になってないな
どこ通ってないんだっけ

っていうときは
coverage annotate すると、"ファイル名,coverage"というファイルができるのでそれを見る

$ coverage annotate shape.py
$ cat shape.py,cover
  #! /usr/bin/env python3

> from typing import List
> from math import sqrt

...

>     def __eq__(self, other: object) -> bool:
>         if not isinstance(other, Point):
!             return NotImplemented
>         return float_equal(self.x, other.x) and \
>             float_equal(self.y, other.y)

...

そうかそうか
確かにそこはテストしてなかった

...(省略されました)

テスト追加

        self.assertFalse(self.p1 == 3)

これでOK

$ coverage report
Name            Stmts   Miss  Cover
-----------------------------------
shape.py           67      0   100%
test-shape.py     133      0   100%
-----------------------------------
TOTAL             200      0   100%

なおcoverage htmlしてhtmlcov/index.htmlをブラウザで開くと
もっとキレイなレポートが見えます
ファイル名をクリックすればannotate相当の表示

overage html
open htmlcov/index.html # MacOSの場合

shape.pyを修正したらmypyかけてcoverageかけて、か
こういうのも便利なツールがありそう
これくらいならシェルスクリプトとかmakeで済むけど