Frage

, fragte ich diese Frage auf der Google-Gruppe, aber ich denke, ich werde eine schnellere Reaktion auf hier.

Ich versuche Googles Mockframework zu verwenden, um meinen Code zu testen. Ich verwende auch ihren Test-Framework auch. Ich bin Kompilieren in VC9. Ich habe Probleme Argumente für: die MFC \ ATL CStrings sind. GMock sagt, dass die Objekte nicht gleich sind und es scheint, es wird auf die Auswertung Zeigeradressen. Die Methode, die ich zu mock bin versucht, ist so strukturiert, etwa so:

void myMethod(const CString & key, const CString & value);

also:

MOCK_METHOD2(myMethod, void(const CString & key , const CString &
value);

Wenn meine Erwartungen Einrichtung ich folgenden Vergleich tue:

CString szKey = _T("Some key");
CString szValue = _T("Some value");

EXPECT_CALL(myMock, myMethod(Eq(szKey), Eq(szValue))).WillOnce(Return
(true));

Ich habe viele verschiedene Kombinationen der Matcher versucht, wie zum Beispiel:

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));

Jede der oben genannten Anrufe hat das gleiche Ergebnis. Wer sonst laufen in dieser Ausgabe?

Dies ist die Ausgabe:

Google Mock versucht, die folgenden 2 Erwartungen, aber keine Ergebnisse:

: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

War es hilfreich?

Lösung

Da Sie nicht eine Kopie der Saiten machen, wenn sie auf Ihre Methode übergeben werden, brauchen Sie wirklich ihre Werte zu überprüfen? Es sollte ausreichen, um die folgende Erwartung zu schreiben:

CString szKey = _T("Some key");
CString szValue = _T("Some value");

EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));

..., die prüft, ob die Saiten auf die Mock-Methode gegeben sind in der Tat die, die Sie (validiert nach Adresse) erwarten, und nicht eine Kopie oder eine andere Zeichenfolge.

In Bezug auf, warum die vorge in Dosen Matcher Arbeit nicht mit CString, ich vermute, dass es entweder, weil CString überschreibt nicht operator()== oder die Matcher-Implementierungen haben keine explizite Spezialisierung für CString.

Andere Tipps

Beendet ein anderer Fehler ist hoch. Seufzer Es war eigentlich ein Bug Fang .... Google Mocks können CStrings vergleichen gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top