2014-10-10 2 views
0

나는 구글 테스트를 위해 테스트의 동일한 파일에 그액세스 보호 변수 googletest에서

class testC : public A { }; 

하고 무리를 의미하는이 클래스 testC 있습니다.

TEST(test_case_name, test_name) { 
... test body ... 
} 

A는이

class A{ 

protected: 
    B b; 
public: 
    //constructors 
    //destructor 
    //member functions 

Q과 같이 구성되어있다 : 어떻게 testC을 통해 모든 TEST(){} 기능에 b 액세스 할 수 있습니까?

나는 testC

public: 
    testC getTest(){ 
     testC test; 
     return test; 
    } 

에 게터을하려고 노력하고 나 또한 참조를 반환하여 시도했지만 운이 ...

+0

시험에서 시험 수업을받는 이유는 무엇입니까? –

+0

지침에 따르면 ... 더 최적의 방법이 있습니까? – TheGuyWithStreetCred

+1

@anhoppe는 아래에서이 작업을 수행하는 방법에 대한 올바른 대답을 가지고 있지만 일반적으로이 작업에 착수 할 때는 필요한 이유 *를 물어보아야합니다. 단위 테스트는 시스템의 예상되는 동작을 테스트해야합니다. 서브 시스템의 상태를 점검하는 것보다 비공개 구성원의 작동을 점검해야하는 경우. 그 서브 시스템이 그러한 테스트를 필요로한다면, 보통 * 자체 테스트 세트가있는 자체 클래스 여야합니다. – IdeaHat

답변

1

난 당신이 googletest에서 제공하는 FRIEND_TEST 매크로를 사용할 수 있다고 생각하지 않습니다. 고급 가이드에서 Private class members 아래를보십시오. 기본적으로 테스트를 테스트중인 코드의 친구로 선언해야합니다. 내가 틀렸다고 생각하지 않으면 보호 된 멤버에게 액세스하려는 모든 테스트에 대해 우정을 선언해야합니다.

UPDATE :이 방법으로 날 귀찮게 무엇 개선 링크 ;-)

주셔서 감사합니다 당신이 테스트중인 코드에 FRIEND_TEST 선언을 추가해야한다는 것입니다. 그러나 그것은 보호 된/개인 회원들에 대해 테스트하고 싶다면 지불해야하는 가격입니다.

+0

'private : testC testO; '와 같이 testC에 객체를 생성해야합니까? – TheGuyWithStreetCred

+1

TEST (testCaseName, testName) 정의는 코드가 올바르면 testC 클래스에 속하지 않습니다. 그것들은 멤버가 아니며 testC 객체에 대한 참조를 반환했는지 여부와 관계없이 보호 된 멤버에 액세스 할 수 없습니다. 테스트를 통해 FRIEND_TEST (testCaseName, testName) 선언을 testC 클래스에 추가하는 유일한 방법입니다. 그런 다음 테스트는 친구이며 CAN은 보호 된 개인 회원에게 액세스 할 수 있습니다. 그러나 이것은 일반적으로 좋은 스타일이 아니라는 점에서 앞서 언급 한 것처럼 사실입니다. – anhoppe

+1

링크를보십시오. 정말 주제를 설명해야합니다. 고급 가이드가 정말 좋습니다! 어떤 방법을 사용하면 ur 방법을 만들 수 있습니다 :-) – anhoppe