これは、@JPlatte と @gongzhitaao の回答に基づいて作成した例外テスターです。私のテスト フレームワークには 2 つのグローバル変数がnum_test
ありnum_test_success
、実行されたテストの数と一連のテストで成功したテストの数を追跡しますが、これはニーズに合わせて変更できます。
int num_test;
int num_test_success;
#define UT_ASSERT_THROW(expression, ExceptionType) { \
\
try { \
expression; \
printf("test %d: *** FAILURE *** %s:%d:%s,%s\n", \
num_test, __FILE__, __LINE__, \
#expression, #ExceptionType); \
} catch (const ExceptionType &) { \
printf("test %d: success\n", num_test); \
++num_test_success; \
} catch (...) { \
printf("test %d: *** FAILURE *** %s:%d:%s,%s\n", \
num_test, __FILE__, __LINE__, \
#expression, #ExceptionType); \
} \
\
++num_test; \
\
}
マクロは、現在のファイルと行番号に展開されます ( __FILE__
https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.htmlを参照)。マクロ内のポンド記号は、引数を文字列としてマクロ展開に配置するようにプリプロセッサに指示します ( http://bruceblinn.com/linuxinfo/Stringification.htmlを参照)。__LINE__