对于一个小的测试框架我试图在编译时创建一个函数列表。 我正在使用宏创建一个测试函数,并希望能够从main调用所有添加的testx。
#define ADD_TEST(X) my_test_##X
ADD_TEST(foo){
ASSERT_EQ(1, 2);
}
ADD_TEST(bar){
...
}
int main (void){
something_calling_all_my_tests();
return 0;
}
C ++中的完整示例是http://pastebin.com/C5mmcYDD
问候
答案 0 :(得分:0)
使用属性((构造函数))我们可以在main之前运行该函数并注册每个测试函数。它不是编译时间,但到目前为止符合我的需求。
#define ADD_TEST(TEST_NAME) void test_##TEST_NAME (void); \
void t_##TEST_NAME##_registerFunction (TestFunction test_##TEST_NAME)__attribute__ ((constructor)); \
void t_##TEST_NAME##_registerFunction (TestFunction test_##TEST_NAME){n++; printf("running %s\n", #TEST_NAME);} \
void test_##TEST_NAME (void)