也许是 gtest 错误 - ASSERT_EQ 和 ASSERT_TRUE 编译失败

my_*_*ion 4 c++ googletest

我正在使用最新的gtest。以下代码编译失败:

Error_code rc = some_function();
ASSERT_EQ(OK, rc);
Run Code Online (Sandbox Code Playgroud)

Error_code 是一个枚举 typedef:

typedef enum {
  OK = 0,
  Warning,
  Error
} Error_code;
Run Code Online (Sandbox Code Playgroud)

错误消息没有意义:

Downloads/gtest-1.7.0/unzipped/include/gtest/internal/gtest-internal.h:1026:5: error: could not convert ‘testing::internal::AssertHelper((testing::TestPartResult::Type)2u, ((const char*)"source/unit_test/test.cpp"), 182, gtest_ar.testing::AssertionResult::failure_message()).testing::internal::AssertHelper::operator=((*(const testing::Message*)(& testing::Message())))’ from ‘void’ to ‘std::vector<Ttype>’
     = ::testing::Message()
     ^
Downloads/gtest-1.7.0/unzipped/include/gtest/internal/gtest-internal.h:1029:3: note: in expansion of macro ‘GTEST_MESSAGE_AT_’
   GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)
   ^
Downloads/gtest-1.7.0/unzipped/include/gtest/internal/gtest-internal.h:1032:10: note: in expansion of macro ‘GTEST_MESSAGE_’
   return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
          ^
Downloads/gtest-1.7.0/unzipped/include/gtest/gtest_pred_impl.h:80:5: note: in expansion of macro ‘GTEST_FATAL_FAILURE_’
     on_failure(gtest_ar.failure_message())
     ^
Downloads/gtest-1.7.0/unzipped/include/gtest/gtest_pred_impl.h:147:3: note: in expansion of macro ‘GTEST_ASSERT_’
   GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \
   ^
Downloads/gtest-1.7.0/unzipped/include/gtest/gtest_pred_impl.h:166:3: note: in expansion of macro ‘GTEST_PRED_FORMAT2_’
   GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
   ^
Downloads/gtest-1.7.0/unzipped/include/gtest/gtest.h:1993:3: note: in expansion of macro ‘ASSERT_PRED_FORMAT2’
   ASSERT_PRED_FORMAT2(::testing::internal:: \
   ^
Downloads/gtest-1.7.0/unzipped/include/gtest/gtest.h:2011:32: note: in expansion of macro ‘GTEST_ASSERT_EQ’
 # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
                                ^
source/unit_test/test.cpp:182:5: note: in expansion of macro ‘ASSERT_EQ’
     ASSERT_EQ(OK, rc);
Run Code Online (Sandbox Code Playgroud)

我把它改成了ASSERT_TRUE(OK == rc),类似的混乱错误。

然后我将其更改为EXPECT_EQ(OK, rc),它编译并运行良好!

在我看来,这是 gtest 中某个地方的错误。但喜欢确认。

Vla*_*sev 5

ASSERT_宏不能在非空函数中使用。详细信息可以在入门和此常见问题解答项目中找到

  • 链接转到404 (2认同)