gpt4 book ai didi

c++ - 谷歌测试框架允许 TEST 的未定义参数

转载 作者:行者123 更新时间:2023-11-28 07:13:12 27 4
gpt4 key购买 nike

使用 Google Test Framework 时我可以编译以下代码,尽管有 barewords undefined symbol 作为参数传递给 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 宏只是将它们用作构建 block 来生成代码。在这种情况下,它使用名为 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);
}

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

关于c++ - 谷歌测试框架允许 TEST 的未定义参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20667724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com