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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top