2013-04-10 2 views
2

스트림을 인수로받는 Reference 생성자가 있습니다.Google 테스트 C++ 스트림이 null인지 확인

Reference::Reference(std::istream& p_is) 
{} 

스트림이 null이 아닌 경우 단위 테스트를 Google 테스트로 확인해야합니다. Google에서 수행 할 수있는 작업을 확인했지만 아무 것도 찾을 수 없습니다.

내 질문은 : 당신이 그것을하는 방법을 아시나요, 아니면 나를위한 조언이 있습니까?

안부는

답변

2

참조는 항상 유효한 객체 또는 함수를 참조하도록 초기화해야합니다. 유효한 객체 또는 함수에 바인딩되지 않은 참조는 정의되지 않은 동작을 생성합니다. null 값을 전달해야하는 경우 참조가 아닌 포인터를 사용하십시오.

0

Captain Obvlious가 지적했듯이 잘못된 개체/기능에 대한 참조를 가질 수 없습니다. 포인터를 전달하거나 Google Test를 사용하지 않을 경우 if (! p_is.good()) 만 생성자를 호출 할 수 있습니다 (죄송합니다. Google Test의 기능에 익숙하지 않으므로 나는 이미 말한 것을 다시 반복 할 것입니다.)

0

NULL 참조를 테스트해야한다고 생각하는 이유를 다시 생각해보십시오. 참조보다 포인터를 망칠 가능성이 훨씬 큽니다. 예컨대

,이 충돌을

int *p; 
if(true) 
{ 
    int x; 
    p = &x; 
} 

*p = 3;//runtime error 

을주고 있지만 기준이 동일한 범위의 값과의 값을 할당해야하기 때문에, 도면 일어날 수 없다.

그러나 충돌이 발생할 수 검사가 유용 할 것입니다 경우가 있습니다

int* p =0; 
if (p) 
{ 
    int& ref(*p); 
    int i(ref); 
} 

그래서 같이

int* p = 0; 
int& ref(*p); 
int i(ref); // access violation here 

을하지만 대신 포인터를 확인 할 수 있습니다가, 같은 당신이 참조 초기화에 대한 코드에서 책임이 있다고 말했다. 초기화가 포인터의 pointee (예 : int& ref(*p);) 인 경우 포인터를 확인하십시오.

HTH

관련 문제