googletest:如何从内部方法跳过测试

mrk*_*rks 5 c++ testing googletest

使用GTEST_SKIP我们可以(有条件地)跳过测试。其实现方式如下:

#define GTEST_SKIP_(message) \
  return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip)
Run Code Online (Sandbox Code Playgroud)

如果我们在主要测试体中,一切都很好。

如何跳过代码库深处的测试?这不起作用:

int skip_this(int x) {
  if (x == 3) GTEST_SKIP();
  return x;
}

TEST(X, Y) {
  skip_this(2);
  skip_this(3);
  throw std::runtime_error("Did not skip");
}
Run Code Online (Sandbox Code Playgroud)

错误:

/Users/markus/Projekte/Opossum/Git/src/test/operators/aggregate_test.cpp:183:15: error: cannot initialize return object of type 'int' with an rvalue of type 'void'
  if (x == 3) GTEST_SKIP();
              ^~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

换句话说:如何修改skip_this以使测试通过或标记为“跳过”?

Dmy*_*yka 1

您不能在内部函数中使用 GTEST_SKIP 。它不会生效。我只能提供这个解决方案或类似的东西:

#define SKIPCODE -1

int skip_this(int x)
{
   if (x == 3)
      return SKIPCODE;
   else return x;
}

TEST(Test)
{
   int n = 3;

   if (skip_this(n) == SKIPCODE)
      GTEST_SKIP();
   ASSERT_TRUE(false);
}

int main(int argc, char** argv)
{
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)

  • 你能演示它在普通函数以及“TEST()”中的工作原理吗?问题中的错误似乎更多是由于嵌入的“return”没有值造成的。 (2认同)