1

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 

私の理解が正しければ、テストクラスは無条件に本番クラスの子になります。これにより、本番クラスがテストクラスに依存するようになります。事実上、本番コードには私のテストライブラリも含まれます。

これが正しいことかどうかはわかりません。

私はここで何かが足りないのですか、それとも条件付きでのみコンパイルする必要がありますか?

ありがとう。

4

1 に答える 1

3

そんな風には読まない。必要に応じて、構成された存在しないクラスを本番クラスの友達にすることができます。それは無害であり、依存関係を導入したり、本番コードにテストコードを追加したりすることはありません。

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

WibbleWibbleが存在しない場合でも、このコードは完全に正しいです。したがって、依存関係はありません。

于 2012-10-27T07:45:11.437 に答える