GoogleMock - igualadores y MFC \ ATL CString
-
22-09-2019 - |
Pregunta
hice esta pregunta en el grupo de Google, pero creo que voy a obtener una respuesta más rápida aquí.
Estoy tratando de utilizar de Google que imita marco para probar mi código. También estoy utilizando sus href="http://code.google.com/p/googletest/" rel="nofollow marco de pruebas también. Estoy compilando en VC9. Tengo problemas emparejan argumentos que son MFC \ ATL CStrings. GMock dice que los objetos no son iguales y parece que está evaluando en la direcciones puntero. El método que estoy tratando de maqueta está estructurado de esta manera:
void myMethod(const CString & key, const CString & value);
así:
MOCK_METHOD2(myMethod, void(const CString & key , const CString &
value);
Al configurar mis expectativas que estoy haciendo para comparación siguiente:
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(Eq(szKey), Eq(szValue))).WillOnce(Return
(true));
He probado muchas combinaciones diferentes de los comparadores como por ejemplo:
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));
Cualquiera de las llamadas anteriores han producido el mismo resultado. Cualquier otra persona plazo en este tema?
Esta es la salida:
Google Mock trató los siguientes 2 expectativas, pero ninguno coincide:
: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
Adam
Solución
Dado que usted no está haciendo una copia de las cuerdas cuando se pasan a su método, lo que realmente necesita para comprobar sus valores? Debería ser suficiente para escribir la siguiente expectativa:
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));
... que se compruebe que la cadena indicada con el método simulacro de hecho son los que se pueden esperar (validado por la dirección), y no una copia o de otra cadena.
En cuanto a por qué los igualadores de pre-enlatados no trabajo con CString
, sospecho que es ya sea porque no CString
anular operator()==
o las implementaciones matcher no tiene una especialización explícita para CString
.
Otros consejos
terminó siendo un error diferente. suspiros En realidad, fue la captura de un error .... Google Mocks puede comparar CStrings muy bien.