PrintTo为指针在谷歌测试

PrintTo for a pointer in Google Test

本文关键字:谷歌 测试 指针 PrintTo      更新时间:2023-10-16

我可以指定在测试失败时如何显示对象的内容。为此,我为该类定义了函数PrintTo。结果如预期(字符串MyObject as object):

x.cpp:17: Failure
Value of: foo1
Expected: has foo <MyObject as object>
  Actual: <MyObject as object> (of type Foo)

不幸的是,我找不到如何为指向对象的指针做同样的事情。而不是自定义字符串MyObject as pointer我得到默认输出:

x.cpp:22: Failure
Value of: pfoo1
Expected: has foo 0x8058330
  Actual: 0x8058320 (of type Foo*)

作为一个解决方案,我可以解引用指针,但我想知道是否有一个直接的解决方案,这是重载PrintTo指针。

#include <gmock/gmock.h>
struct Foo { };
void PrintTo(const Foo& value, ::std::ostream* os) {
  *os << "<MyObject as object>";
}
void PrintTo(const Foo* value, ::std::ostream* os) {
  *os << "<MyObject as pointer>";
}
MATCHER_P(HasFoo, expected, "") { return false; }
TEST(Foo, Object) {
  Foo foo1, foo2;
  ASSERT_THAT(foo1, HasFoo(foo2));
}
TEST(Foo, Pointer) {
  Foo *pfoo1 = new Foo(), *pfoo2 = new Foo();
  ASSERT_THAT(pfoo1, HasFoo(pfoo2));
}
int main(int argc, char** argv) {
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

根据@AndyG和@olaf- diesche的建议,应该删除前面的const。这些工作:

Foo* value

Foo* const value

const Foo* value

const Foo* const value

const Foo*& value