【Python】単体試験 / nose ~ 入門編 ~

■ はじめに

nose を使うことになりそうなので、メモ。

■ 設定

pip install nose

# カバレッジを取得するために...
pip install coverage

■ nosetests コマンド

オプション一覧

https://het.as.utexas.edu/HET/Software/Nose/plugins/cover.html

# オプション 説明
1 --with-coverage コードカバレッジ
2 --cover-branches 分岐網羅 (C1:branch coverage)を測定
3 --cover-erase 前回収集した結果を消して、再測定
4 --cover-html HTML出力

補足:C0/C1/C2 について
http://replication.hatenablog.com/entry/2016/05/26/071409
https://www.techmatrix.co.jp/t/quality/coverage.html

* C0 : 命令網羅 (statement coverage) 
  => 全命令を実行すれば100%

* C1 : 分岐網羅 (branch coverage)
  => 全分岐を実行すれば100%
  => C1が100%の場合、C0も100%になる(逆は違う)

* C2: 条件網羅率 (condition coverage)
  => 条件文における真偽が少なくとも1回は実行される
  => C2が100%であっても、C0、C1が100%になるとは限らないことに注意

実行例

カバレッジ

nosetests --with-coverage --cover-branches --cover-html

出力結果

Name            Stmts   Miss Branch BrPart  Cover
-------------------------------------------------
calculator.py       4      1      2      1    67%
----------------------------------------------------------------------
Ran 1 test in 0.007s

参考文献

https://blog.chocolapod.net/momokan/entry/80
https://momijiame.tumblr.com/post/70768835863/python-%E3%81%AE-nose-coverage-%E3%81%A7%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AB%E3%83%90%E3%83%AC%E3%83%83%E3%82%B8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B
http://t2y.hatenablog.jp/entry/20120209/1328740274
https://blog.chocolapod.net/momokan/entry/80
http://sandmark.hateblo.jp/entry/2017/10/18/003000
http://sbkro.github.io/entry/2015/03/05/nosetests-01/#.XiWnz8j7Q2w
https://takemikami.com/2016/06/11/nosepython.html
https://qiita.com/tomotaka_ito/items/1644db679264dcbb11f5

関連記事

単体試験 / unittest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/02/223658
単体試験 / unittest ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/03/31/000000
単体試験 / mox ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/19/000000
単体試験 / pytest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/13/224810