過去の解決済みの質問がありまして、こちらと同様のことを行いたいのですが、
解決策の処理の動きが読み取れません。
既存ソースに手を入れずに同一ソース内の関数をスタブにしてユニットテストを実施する方法
https://teratail.com/questions/37783
上記質問の、最終的な解決案「スタブ関数をテスト関数の引数渡しにする方法」のサンプルコードを動作させてみると、
確かにスタブ対象関数が、スタブ関数に置き換えができているのですが、処理の動きが理解できません。
下記に上記質問のコードを引用させて頂きますが、具体的には、
test_stubcall(func1_stub, func2_stub);
を呼んで、なぜtest()
が呼ばれるのか。
(defineの書き方が逆に見えるが、逆にするとコンパイルエラーが発生する。)- void関数の
test()
になぜ、stub関数を渡せて、更に、stub関数に置き換えることまで実現できているのか
という2点がわかりません。宜しければご教授頂けると幸いです。
既存ソース側
C
1// test.c 2#include <stdio.h> 3 4void func1(void); 5void func2(void); 6 7static void test(void) 8{ 9 func1(); 10 func2(); 11} 12 13void func1(void) 14{ 15 printf("func1()\n"); 16} 17void func2(void) 18{ 19 printf("func2()\n"); 20}
テストコード側
c
1typedef void (*func_t)(void); 2#define test(a) test_stubcall(func_t func1, func_t func2) 3 4#include "test.c" 5 6void func1_stub(void) 7{ 8 printf("func1_stub\n"); 9} 10 11void func2_stub(void) 12{ 13 printf("func2_stub\n"); 14} 15 16int main() 17{ 18 test_stubcall(func1_stub, func2_stub); 19 return 0; 20}
実行結果
func1_stub func2_stub

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/21 23:20