【问题标题】:gtest unexpected conversiongtest 意外转换
【发布时间】:2015-12-09 04:31:53
【问题描述】:

我正在测试我的功能的正确操作

bool Core::IsMeta(void)
{
  return mProc->GetCode(mPC)->Meta;
}

使用说明

EXPECT_EQ(true,CC->IsMeta()); // The instruction pointed to is meta
EXPECT_EQ(false,CC1->IsMeta()); // The instruction pointed to is NOT meta

测试运行正常,但两个测试的行为不同:'true' 情况编译正常,'false' 情况出现警告

在包含的文件中 /... ./build/gtest/src/gtest/include/gtest/gtest.h:1929:0, 从 /... .cpp:1: /... .cpp: 在成员函数中'virtual void ... ::TestBody()': /... /build/gtest/src/gtest/include/gtest/internal/gtest-internal.h:133:55: 警告:将“false”转换为“char”参数 1 的指针类型 testing::internal::IsNullLiteralHelper(testing::internal::Secret*)’ [-Wconversion-null] (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) ^

为什么 gtest 要将 'false' 转换为指针?为什么不“真实”? 我错过了什么吗?

【问题讨论】:

  • 为什么不使用EXPECT_TRUE 和EXPECT_FALSE 进行布尔测试?

标签: c++ googletest


【解决方案1】:

对于布尔值,您需要使用 EXPECT_TRUE() 和 EXPECT_FALSE() 而不是 EXPECT_EQ。

【讨论】:

  • 不解释发生了什么。为什么 eq 不适用于布尔值?
  • @The Badger:我只是在有问题的测试行上方复制了测试行。是的,我可以使用 EXPECT_TRUE() 等。但是,我认为 eq 也应该可以工作。而且,我还觉得奇怪的是,'false' 会引发非常奇怪的转换,而 'true' 会按预期工作。
【解决方案2】:

问题不在于 gtest,它实际上是一个 gcc 错误,如 here 所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多