在我的项目中(出于技术原因,不得依赖任何外部图书馆或第三方来源)我已设置以下test.h
:
static int rc = 0;
#define TESTCASE( x ) if ( x ) {} \
else \
{ \
rc += 1; \
printf( "FAILED: " __FILE__ ", line %d - " #x "\n", __LINE__ ); \
}
大部分时间都可以正常工作 - 如果测试用例评估为true,则没有任何反应。如果测试用例的计算结果为false,则打印测试用例,包括文件名和行号。
但是,当测试用例包含字符串文字时,TESTCASE宏中的printf()
坚持将字符串文字解释为格式字符串的一部分(对于某个测试用例来说这是致命的)。
现在我正在考虑各种方法让printf()
逐字打印x
(测试用例)中的内容,但我已经空了。最接近的是使用%c
打印固定数量的字符,并将文本案例(#x
)作为参数传递给printf()
- 但我无法弄清楚如何确定大小#x
,特别是如果它包含零字节(排除使用strlen()
)。
困惑,不知所措。帮助
答案 0 :(得分:3)
如何使用%s
作为格式,然后将字符串化的测试用例作为参数传递,就像您对行号一样?
printf( "FAILED: %s, line %d - %s\n", __FILE__, __LINE__, #x );
#
将参数转换为正确的双引号分隔字符串,因此没有什么可以阻止您将此字符串作为参数传递给printf ...
(你不应该使用任何非硬编码的值作为printf的格式字符串:大部分时间都在提高地狱性)