我正在使用 catch2(最新版本 - 目前为 2.13.6),在我的测试用例中,我有一堆类似于以下内容的检查:
CHECK(!strcmp(my_str, "some literal string here"));
每个测试用例的文字都不同,显然
my_str
的内容也是如此。
当这样的检查失败时,我得到的输出如下:
/path/to/test_source_file.cpp:123: FAILED:
CHECK( !strcmp(my_str, "some literal string here") )
with expansion:
false
但是我没有打印出
my_str
中的内容。让上面的内容也打印 my_str
的(部分)内容的最佳方法是什么?
备注:
my_str
是空终止的。std::string
,但如果你必须这样做,我不排除它。我自己的 hacky 解决方案如下:
#define PRINTING_CHECK(expected_, actual_) \
do { \
INFO( "actual_ = " << '"' << actual_ << '"'); \
INFO( "expected_ = " << '"' << expected_ << '"'); \
CHECK(!strcmp(actual_, expected_)); \
} while (false) \
但我希望可能有更优雅的东西。
如果你这样做:
std::string left("a");
CHECK(left == "b");
你明白了
Failure:
CHECK(left == "b")
with expansion:
"a" == "b"