gpt4 book ai didi

c++ - 使用 FRIEND_TEST 是正确的做法吗?

转载 作者:行者123 更新时间:2023-11-30 02:59:12 34 4
gpt4 key购买 nike

当我在 https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest_prod.h 查看 FRIEND_TEST 的实现时,我看到以下内容:

#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
// When you need to test the private or protected members of a class,
// use the FRIEND_TEST macro to declare your tests as friends of the
// class. For example:
//
// class MyClass {
// private:
// void MyMethod();
// FRIEND_TEST(MyClassTest, MyMethod);
// };
//
// class MyClassTest : public testing::Test {
// // ...
// };
//
// TEST_F(MyClassTest, MyMethod) {
// // Can call MyClass::MyMethod() here.
// }
#define FRIEND_TEST(test_case_name, test_name)\
friend class test_case_name##_##test_name##_Test
#endif

如果我的理解是正确的,测试类无条件地成为生产类的 child 。这将使生产类依赖于测试类。实际上,生产代码也将包含我的测试库。

我不确定这样做是否正确。

我是不是遗漏了什么,还是应该只根据条件进行编译?

谢谢。

最佳答案

我不是那样读的。如果你愿意,你可以让一个虚构的不存在的类成为你的生产类的 friend 。它是无害的,当然不会引入依赖项或将测试代码添加到您的生产代码中。

class Production
{
friend class WibbleWibble;
...
};

即使 WibbleWibble 不存在,这段代码也是完全正确的。所以没有依赖性。

关于c++ - 使用 FRIEND_TEST 是正确的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13098243/

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