PrintTo为指针在谷歌测试
PrintTo for a pointer in Google Test
我可以指定在测试失败时如何显示对象的内容。为此,我为该类定义了函数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
相关文章:
- 谷歌测试中的期望值存储在哪里
- 更正 CMakeList.txt 用于谷歌测试的文件?
- 如何让谷歌测试正常运行。测试总是失败。(它不会编译)
- 谷歌测试方法与流
- 谷歌测试:模板模板的笛卡尔乘积的类型列表与模板
- C++ 谷歌测试除以零
- 多定义C ++ / C谷歌测试
- 使用谷歌测试进行测试时出现分段错误
- 如何使用谷歌测试检查两个枚举类元素的相等性?
- 谷歌测试集ArgReferee with vector<unique_ptr>
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 谷歌测试发现在macOSX上添加并运行了我的所有测试两次
- 在谷歌测试中创建模拟类的向量
- 为什么在谷歌测试中调用"mkdtemp()"时失败
- 谷歌测试可执行文件中的单元测试未被vstest选中
- 谷歌测试:Android与Linux EXPECT_DEATH测试
- 谷歌测试比较指针数组的内容
- ptrdiff_t typedef 碰撞 - 谷歌测试和英特尔蟒蛇
- 我无法编译谷歌测试,告诉链接器输入未使用(macOS)
- EXPECT_CALL在谷歌测试中没有模拟