シンプルに Cutter を実行してカバレッジをとる
Cutter という単体テストフレームワークがあるけれど、autoconf を駆使するようでよくわからない。というわけで、素で実行してみる。
準備
cutter をインストール
sudo port install cutter
テスト対象と、テスト関数をわけた方がいいけれど、これはテストだから
ひとつにまとめたファイルを用意した。
#include <cutter.h> int add(int a, int b); int sub(int a, int b); void test_add(void); void test_sub(void); int add(int a, int b){ return a+b; } int sub(int a, int b){ return a-b; } void test_add(void){ cut_assert_equal_int(3, add(1,2)); } void test_sub(void){ cut_assert_equal_int(5, sub(9,4)); }
を cutter.c とする。
cutter 用の ライブラリをおく場所をつくる。
mkdir lib
cutter でインストールされている、ライブラリやヘッダの場所を確認しておく
コンパイル
先に調べた、ライブラリやヘッダの場所にあわせて、コンパイルオプションを設定する。
gcc -shared -coverage cutter.c -o ./lib/test.so -I/opt/local/include/cutter -L/opt/local/lib -lcutter
テスト実行
cutter lib
これでテストが実行できる。
.. Finished in 0.039805 seconds (total: 0.000218 seconds) 2 test(s), 2 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed
この.は成功したテストである。
カバレッジをみる
この時点で、cutter.gcda, cutter.gcno ができているので、
gcov cutter.gcda
とすれば、
File 'cutter.c' Lines executed:100.00% of 6 cutter.c:creating 'cutter.c.gcov'
と表示されて、cutter.c.gcov ができる。
cutter.c.gcovをlcovでみればいいかもしれないが、とりあえず開くと。
-: 0:Source:cutter.c -: 0:Graph:cutter.gcno -: 0:Data:cutter.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include <cutter.h> -: 2: -: 3:int add(int a, int b); -: 4:int sub(int a, int b); -: 5:void test_add(void); -: 6:void test_sub(void); -: 7: 1: 8:int add(int a, int b){ return a+b; } 1: 9:int sub(int a, int b){ return a-b; } -: 10: -: 11:void test_add(void){ 13: 12: cut_assert_equal_int(3, add(1,2)); 1: 13:} -: 14: -: 15:void test_sub(void){ 13: 16: cut_assert_equal_int(5, sub(9,4)); 1: 17:}
とりあえず、カバレッジがとれていることがわかった。
でもどうして、13回も実行されているのかはさっぱりわからない。