2017-09-08 66 views
2

プライベートメンバーにアクセスするのに苦労しています。ここに私のコードです。 GoogleTestでプライベートメンバーにアクセスする

#include "UnitTests.h" 
#define TEST_FRIENDS \ 
    friend class TestCustomUnitTest_hello_Test; 
#include "LibToTest.h" 

TEST(TestCustomUnitTest, hello) 
{ 
    LibToTestNamespace::LibToTest ltt; 
    ltt.mInt = 5; 
    ltt.GetMyInt(); 
} 

#pragma once 
#ifndef TEST_FRIENDS 
#define TEST_FRIENDS 
#endif 

namespace LibToTestNamespace 
{ 
    class LibToTest 
    { 
    public: 
     double Add(double, double); 

    private: 
     TEST_FRIENDS; 
     int GetMyInt(); 
     int mInt; 
    }; 
} 

は、私が "クラスで宣言されたプライベートメンバにアクセスすることはできません" エラーが発生します。 TEST_FRIENDSが正しく置き換えられないように、ライブラリが最初にビルドされると思っていますか?しかし、単体テストがライブラリに依存する場合、常に最初にビルドされますか?

+1

、あなたは、常に前処理で見ることができます'-E'フラグを使用して出力します。私はTEST_FRIENDS定義を一箇所に置いてテストビルドでのみ定義されている '-DTESTING'フラグなどに依存することをお勧めします – xaxxon

+0

ユニットテストではプライベートメンバーにアクセスする必要はありません。あなたは公共のインターフェイスを実行する必要があります – user4581301

+1

@ user4581301何人かの人々は、他の人はそれに同意しないと言う。普遍的に受け入れられる真実ではありません。 – xaxxon

答えて

0

私はこれが私の生産クラスはに存在し、同じ名前空間に私のユニットテストクラスをラップすることによって動作するようになった。マクロは、特定のスポットであるものについては

namespace LibToTestNamespace 
{ 
    TEST(TestCustomUnitTest, hello) 
    { 
     LibToTest ltt; 
     ltt.mInt = 5; 
     ltt.GetMyInt(); 
    } 
} 
関連する問題