Google 그룹에서이 질문을했지만 여기서 더 빨리 응답 해 드리겠습니다.GoogleMock - Matchers 및 MFC ATL CString
Google's Mocking framework을 사용하여 코드를 테스트하려고합니다. 나는 그들의 test framework도 활용하고있다. 나는 VC9에서 컴파일하고있다. MFC \ ATL CString 인 인수와 일치하는 문제가 있습니다. GMock 은 개체가 같지 않으며 포인터 주소가 인 것으로 나타납니다. 내가 조롱을 시도하고있는 방법과 같이 구성되어있다 :
void myMethod(const CString & key, const CString & value);
따라서 : 내가 가지고있는
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(Eq(szKey), Eq(szValue))).WillOnce(Return
(true));
: 내 기대를 설정할 때
MOCK_METHOD2(myMethod, void(const CString & key , const CString &
value);
나는 다음과 같은 비교를하고있는 중이 야 다음과 같은 matchers의 다양한 조합을 시도 :
EXPECT_CALL(myMock, myMethod(StrCaseEq(_T("Some Key")), StrCaseEq(_T
(""Some value)))).WillOnce(Return(true));
EXPECT_CALL(myMock, myMethod(TypedEq<const CString &>(szKey),
TypedEq<const CString &>(szValue))).WillOnce(Return(true));
EXPECT_CALL(myMock, myMethod(TypedEq<const CString &>(szKey),
TypedEq<const CString &>(szValue))).WillOnce(Return(true));
위의 호출 중 하나라도 동일한 결과가 나타납니다. 다른 사용자가 을이 문제로 돌리 시나요?
이
는 출력 :구글 모의은 다음이 개 기대를했지만, 아무도 일치하지 :
:80: tried expectation #0
Expected arg #1: is equal to 006D430C pointing to "Some value"
Actual: 4-byte object <A8EF 1102>
Expected: to be called once
Actual: never called - unsatisfied and active
:83: tried expectation #1
Expected arg #1: is equal to (ignoring case) ""
Actual: 4-byte object <A8EF 1102>
Expected arg #2: is equal to (ignoring case) "Some value"
Actual: 4-byte object <C0EE 1102>
Expected: to be called once
Actual: never called - unsatisfied and active
아담
"일부 값"은 'myMethod'의 상수입니다. 비교는 모의 (mock)를 제공하는 "Some Value"와 메소드에서 생성 된 "Some Value"사이의 비교입니다. 또한 CString은 operator() ==를 재정의하므로 Eq (v) 함수가 적어도 이것을 활용할 수 있다고 가정합니다. 의견을 보내 주셔서 감사합니다! –
나는 본다. "Some Value"에 접근 할 수 없다면 함수의 입력 매개 변수에 대해 선택한 술어를 실행하는'ResultOf' 정규 표현식을 시도해 볼 수 있습니다. 그것은 문자열 매칭을 위해 과도한 것처럼 보이지만, 다른 matchers가 작동하지 않는 이유에 대한 단서를 제공 할 수 있습니다. –