谷歌测试框架允许未定义的参数进行测试

undefined arguments to TEST allowed with google test framework

本文关键字:测试 参数 框架 谷歌 未定义      更新时间:2023-10-16

当使用谷歌测试框架时,我可以编译以下代码,尽管有空未定义符号作为参数传递给TEST。

#include <gtest/gtest.h>
TEST(faketestfixture,faketestname){
  ASSERT_EQ(1,1);
}
int main(int argc, char** argv){
  testing::InitGoogleTest(&argc,argv);
  return RUN_ALL_TESTS();
}

为什么/如何编译?他们用什么魔法?

我开始

偷看源头,但很快意识到我超出了我的深度,甚至不知道从哪里开始。

TEST

是一个预处理器宏,它不是标识符,TEST 宏只是将它们用作生成代码的构建块。在这种情况下,它使用名为 TestBody 的方法生成名为 faketestfixture_faketestname_Test 的类。该方法的实际主体是您在 TEST 宏调用后在大括号中提供的内容。因此,生成的代码大致如下所示:

class faketestfixture_faketestname_Test : public testing::Test {
 public:
  void TestBody();
  // ... more stuff ...
}
void faketestfixture_faketestname_Test::TestBody() {
  // This is the test body you supplied.
  ASSERT_EQ(1,1);
}

所以这相对简单。真正的魔力在于如何将这一切连接在一起并被调用。:-)