テスト結果を表示する方法に CUnit フレームワークを使用しています。(私はプログラミングとSOの初心者なので、ステップバイステップの回答は本当に感謝しています)。
exit() を期待する関数をテストするときに、同じ CUnit フレームワークを使用できる方法はありますか? 私にはそうは思えませんが、とにかく尋ねたいと思っています-他のCUnitテストと一緒に合格/不合格の結果が表示されるので、理想的です。
そうでない場合は、他の初心者向けのソリューション (この SO 投稿など) を検討してきましたが、GOTO/setjmp/longjmp を使用できません。また、ソリューションは移植可能である必要があります。
このコードを実行するために Mac & gcc コマンドラインを使用しています。
EDIT提案された解決策の 1 つは、理想的に見える C プリプロセッサ (CPP) ディレクティブ / "mocking"を使用することです。test.c ファイルで以下のコードを使用しました。
#define ERROR(PHRASE) {fprintf(stderr,"Fatal Error %s occurred in %s, line %d\n",PHRASE, FILE, LINE); exit(2);}
#ifdef ERROR(PHRASE)
#define ERROR(PHRASE) {printf("In test phase");}
#endif
#ifndef ERROR(PHRASE #define ERROR(PHRASE) {printf("Not In test phase");}
#endif
端末が私に与えるエラーメッセージは次のとおりです。
test.c:30:9: warning: 'ERROR' macro redefined [-Wmacro-redefined]
#define ERROR(PHRASE) {printf("In test phase");}
^
test.c:26:9: note: previous definition is here
#define ERROR(PHRASE) {fprintf(stderr,"Fatal Error %s occured in %s, lin...
^
test.c:32:14: warning: extra tokens at end of #ifndef directive
[-Wextra-tokens]
#ifndef ERROR(PHRASE) {printf("Not In test phase");}
(PHRASE) を削除しても、同じエラーが発生します。
編集 他の誰かに役立つ場合は、 #ifdef を使用してモックすることが、最終的にこの問題を解決する最も簡単な方法でした。こちらのサイトも参考になりました。