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回も実行されているのかはさっぱりわからない。