J'ai posé cette question sur le groupe Google, mais je pense que j'obtiendrai une réponse plus rapide ici.GoogleMock - Matchers et MFC ATL CString
J'essaie d'utiliser Google's Mocking framework pour tester mon code. J'utilise aussi leur test framework. Je compile dans VC9. Je rencontre des problèmes de correspondance avec les arguments MFC \ ATL CStrings. GMock indique que les objets ne sont pas égaux et qu'il semble évaluer sur les adresses de pointeur . La méthode que je vais tenter de se moquer est structuré comme ceci:
void myMethod(const CString & key, const CString & value);
ainsi:
MOCK_METHOD2(myMethod, void(const CString & key , const CString &
value);
Lors de la configuration de mes attentes que je fais à la comparaison suivante:
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(Eq(szKey), Eq(szValue))).WillOnce(Return
(true));
Je essayé de nombreuses combinaisons différentes des allumettes telles que:
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));
L'un des appels ci-dessus a produit le même résultat. Quelqu'un d'autre exécute dans ce problème?
C'est la sortie:
Google Mock a essayé les 2 attentes suivantes, mais aucun matched:
: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
La "certaine valeur" est une constante dans "myMethod". La comparaison est entre la «certaine valeur» que je fournis le faux et la «certaine valeur» qui est produite dans la méthode. En outre, CString remplace l'opérateur() == donc je suppose que la fonction Eq (v) pourrait au moins utiliser ceci. Merci pour la contribution! –
Je vois. Si "Some Value" est inaccessible, vous pouvez essayer le programme 'ResultOf', qui exécute un prédicat de votre choix par rapport au paramètre d'entrée de la fonction. Cela semble exagéré pour l'appariement de chaînes, mais peut fournir des indices sur la raison pour laquelle les autres coupleurs ne fonctionnent pas. –