2016-07-21 3 views
1

원본 코드를 건드리지 않고 테스트 컨텍스트에서 일부 개인 멤버 변수에 액세스하는 "깨끗한"방법을 찾고 있습니다. 우정 관계를 테스트 클래스와 구현하려고 생각했지만 어떤 이유로 작동하지 않기 위해 접근자를 필요로한다는 것을 이해하지 못합니다. 왜 그렇게되는거야? private 멤버 변수에 액세스하는 다른 방법이 있습니까?테스트에서 우정 사용하기

class A 
{ 
protected: // this works 
// private: // this DOES not work 


    int a; 
}; 

class TestableA : public A 
{ 
    friend class TestA; 
}; 

class TestA 
{ 
    void test() 
    { 
     m_a.a = 100; 
    } 

    TestableA m_a; 
}; 

답변

3

보호 된 클래스에서만 개인 변수에 액세스 할 수 없습니다.

TestATestableA의 친구이므로 TestableA에있는 모든 것을 볼 수 있습니다. 그러나 a이 비공개 인 경우 TestableA에서 액세스 할 수 없습니다.

  • 사용 사방
  • 보호 직접 클래스 A에 친구 선언을 추가

    당신은 몇 가지 옵션이 있습니다. 디버그/테스트 빌드에만 영향을주는 매크로로도 수행 할 수 있습니다. 이 항목에 대한 자세한 정보는

는 이유를 설명과 링크에 대한 Friendship in Service of Testing

+0

감사라는 좋은 표현이있다. 아이디어는 원래 코드를 수정하지 않는 것이었지만 다른 방법은없는 것 같습니다. – nyarlathotep108

+1

동영상은이 문제에 관한 것입니다. 현재 클라운 플러그인으로 구현 된 클래스 외부의 친구를 추가하는 방법을 제안합니다. – Dutow