如何让 catch2 打印比较的 C 风格字符串的内容?

问题描述 投票:0回答:2

我正在使用 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
    ,但如果你必须这样做,我不排除它。
unit-testing string-comparison catch2
2个回答
0
投票

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

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

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


0
投票

如果你这样做:

std::string left("a");
CHECK(left == "b");

你明白了

Failure:
  CHECK(left == "b")
with expansion:
  "a" == "b"
© www.soinside.com 2019 - 2024. All rights reserved.