gmock이 생소하고 SaveArg를 사용할 때 어떤 일이 일어나는지 이해하고 싶습니다.C++ gmock - SaveArg에 null 포인터 전달시 어떤 일이 발생합니까?
는 여기에 내가 gmock의 다큐에있는 내용은 다음과 같습니다
SaveArg<N>(pointer)
: N 번째를 저장 (0 기반) 인수 * 포인터. N 번째의 인수
메이크업 "포인터"점, 또는
"포인터"가 가리키는대로의 N 번째 인수의 값을 할당 :
이 무슨 뜻 ?
나는 다음과 같은 상황을 생각하고 : 내 테스트 기능에서 다음
class MockClass : public BaseClass { public: MOCK_METHOD1(somefunc,void(SomeType&)); };
:
SomeType val; //make this live throughout the test
SomeType* pval = nullptr;
MockClass mymock;
EXPECT_CALL(mymock, somefunc(_)).WillOnce(SaveArg<0>(pval));
//let's force a call
mymock.somefunc(val);
EXPECT_NE(nullptr, pval);
내 요점은 다음과 같습니다
경우 (1) 사실이라면 무엇이 발생합니까? pval = &val
-> 테스트가 진행됩니다.
if (2)가 참이면, 어떤 일이 발생합니까 : *pval = val
-> 이것은 pval이 널 포인터 인 경우 세그먼트 화 오류를 일으 킵니다.
위와 비슷한 상황에서 SaveArg에 nullptr을 전달하고 세그먼트 화 오류가 발생하지 않지만 테스트는 통과되지 않습니다.
너희들이 나를 도울 수 있다면 정말 고마워.
감사
SaveArg는 (2)입니다. [구현 코드] (https://github.com/google/googletest/blob/48ee8e98abc950abd8541e15550b18f8f6cfb3a9/googlemock/include/gmock/gmock-more-actions.h#L172)는 그 점을 분명히합니다. – VladLosev
다른 테스트 코드를 작성하여 (2)가 실제 동작임을 확인할 수 있습니다. @iheanyi VladLosev를 도와 주셔서 감사합니다. –