0

我正在使用catch2(最新版本-截至目前为2.13.6),在我的测试用例中,我有一堆类似于以下内容的检查:

CHECK(!strcmp(my_str, "some literal string here"));

每个测试用例的文字都不同,显然my_str's 的内容也是如此。

当这样的检查失败时,我得到的输出如下:

/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,但如果你必须这样做,我不排除它。
4

1 回答 1

0

我自己的hacky解决方案如下:

#define PRINTING_CHECK(expected_, actual_)           \
do {                                                 \
  INFO( "actual_   = " << '"' << actual_   << '"');  \
  INFO( "expected_ = " << '"' << expected_ << '"');  \
  CHECK(!strcmp(actual_, expected_));                \
} while (false)                                      \

但我希望可能会有更优雅的东西。

于 2021-07-30T12:46:54.667 回答