PythonでUnitTestとCodeCoverageをやってみる(2)

| | Comments (0) | TrackBacks (0)

今回は、前回使用したテストコードを例に、coverage.pyによるカバレッジレポートとtrace2htmlによるカバレッジレポートを行ってみたいと思います。

coverage.pyによるコードカバレッジ

wget http://nedbatchelder.com/code/modules/coverage-2.80.tar.gz


以下の手順でcoverage.pyでコードカバレッジを行います。
$ python coverage-2.80/coverage.py -e
$ python coverage-2.80/coverage.py -x testSuiteCalc.py
test0Tasu5 (__main__.testCalc) ... ok
test0Hiku5 (__main__.testCalc) ... ok
test10Kakeru2 (__main__.testCalc) ... ok
test10Waru2 (__main__.testCalc) ... ok

----------------------------------------------------------------------
Ran 4 tests in 0.002s

OK
$ python coverage-2.80/coverage.py -r -m Calc.py
Name    Stmts   Exec  Cover   Missing
-------------------------------------
Calc       15     14    93%   13

  • "-e"オプションで前回実行のカバレッジのデータを一旦削除。
  • "-x"オプションでユニットテストを実行。カレントに「.coverage」というテスト結果のデータが保存されます。
  • "-r"オプションでレポート表示。上記例では、13行目がテストされていないことがわかります。

以下のコマンドでテストコードのカバー状況を確認することができます。
サフィックスに",cover"が付け加えられたソースファイルが出力されます。
テストで実行されなかった行には、行頭に「!」が付くのでカバレッジの状況を 具体的に確認できます。
$ python coverage-2.80/coverage.py -a Calc.py
$ cat Calc.py,cover
> class Calc:
>         def __init__(self):
>                 self.intCount = 0
>         def tasu (self, number = 1):
>                 self.intCount = self.intCount + number
>         def hiku (self, number = 1):
>                 self.intCount = self.intCount - number
>         def kakeru (self, number = 1):
>                 self.intCount = self.intCount * number
>         def waru (self, number = 1):
>                 self.intCount = self.intCount / number
>         def dummy (self):
!                 self.intCount = self.intCount
>         def population (self):
>                 return self.intCount


trace2htmlによるコードカバレッジ
trace2htmlを利用すると、カバレッジのレポートをHTMLで出力してくれます。

wget http://pypi.python.org/packages/source/t/trace2html/trace2html-0.2.1.tar.gz


以下のコマンドを実行してカバレッジレポートをHTMLに出力します。
$ python trace2html-0.2.1/src/trace2html.py -w Calc --run-command testSuiteCalc.py
test0Tasu5 (__main__.testCalc) ... ok
test0Hiku5 (__main__.testCalc) ... ok
test10Kakeru2 (__main__.testCalc) ... ok
test10Waru2 (__main__.testCalc) ... ok

----------------------------------------------------------------------
Ran 4 tests in 0.003s

OK
report written to: /home/foo/bar/coverage_dir/index.html

出力されたHTMLをブラウザで確認すると以下のようにグラフィカルな表示で レポートが確認できます。
trace2html1.png

0 TrackBacks

Listed below are links to blogs that reference this entry: PythonでUnitTestとCodeCoverageをやってみる(2) .

TrackBack URL for this entry: http://lab.hde.co.jp/blog/mt-tb.cgi/46

Leave a comment

About this Entry

This page contains a single entry by Taizo ITO published on July 3, 2008 12:06 PM.

Ruby on RailsのプロジェクトをApache2で簡単に動かすソフトウェア was the previous entry in this blog.

開発合宿を行いました is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.