我有一个自定义聚合模板类型,我正在尝试使用 gtest 进行测试。我正在使用 TYPED_TEST_P,并测试各种类型。在我尝试做布尔类型之前它工作正常。我收到以下“错误”
error: Value of: const_img.at(pt.x,pt.y)
Actual: true
Expected: *buffer
Which is: true
所以这是说有一个错误:真!=真。以前有人见过这个问题吗?你如何解决它?
我不能在这里发布所有代码,但是:
捕获非错误的调用是:
ASSERT_EQ(*buffer,const_img.at(pt.x,pt.y))
TypeParam
在这种情况下是 typedef bool
,由 Google Test 基于TYPED_TEST_P
. buffer
具有以下类型:
const TypeParam* buffer;
const_image
是一个const Image<TypeParam>&
(自定义类),它强制at
成为 const 重载,具有足迹:
const TypeParam& at(ptrdiff_t col,ptrdiff_t row) const;
显然,这将返回正确的值(true 应该等于 true),并且永远不会到达以下 if 语句的断点:
if (*buffer != const_img.at(pt.x,pt.y))
{
std::cout << "here" << std::endl;
}
如果我跳过测试 const 重载,我不会收到任何错误(这很奇怪)。
编辑:解决方法
以下解决方法有效,但是......愚蠢。
TypeParam a = const_img.at(pt.x,pt.y);
TypeParam b = *buffer;
ASSERT_EQ(
a,b);