次のような条件のユニットテストを実施したいです。
0. ソースは既存であり、手を入れることはできない
0. このソースに対して関数単位のテストを実施したい
0. テスト対象となる関数から呼ばれる関数はスタブとしたい
0. スタブにする関数は、テスト対象と同一のソースに含まれる場合がある
この場合、4番目の同一ソースのスタブがネックになると思います。
既存ソースには手を入れずに同一ソースにある関数をスタブにしてユニットテストを行う方法があれば教えてください。
実は過去に実施済みで、その時は、散々調べて、試行錯誤した結果、「できない」という結論に至りました。
結局、泣く泣く既存ソースに次のようなコード(#ifdef UNITTEST~#endif)を足すことなってしまいました。
既存ソース側
C
1#ifdef UNITTEST 2#define func1 (*pfunc1) 3#define func2 (*pfunc2) 4#endif // UNITTEST 5static void test(void) 6{ 7 func1(); 8 func2(); 9~ 10} 11#undef func1 12#undef func2 13void func1(void) 14{ 15~ 16} 17void func2(void) 18{ 19~ 20}
テストコード側
C
1void testcode(void) 2{ 3 pfunc1 = func1_stub; 4 pfunc2 = func2_stub; 5 test(); 6}
実際にはもう少し簡潔に書けるように、インクルードファイルを作ったりしました。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/13 11:38
2016/06/14 00:25
2016/06/14 00:56
2016/06/14 01:05
2016/06/14 01:33
2016/06/14 02:00