GoogleMock - マッチャとMFC \ ATLのCString
-
22-09-2019 - |
質問
私はGoogleグループにこの質問をしたが、私は私がここに高速な応答を取得すると思います。
私は自分のコードをテストするために Googleのモッキングフレームワークを使用しようとしています。私はまた、に同様に彼らのテストフレームワークを利用しています。私はVC9でコンパイルしています。 私は、MFC \ ATL CStringsの引数に一致する問題を抱えています。 GMock オブジェクトが等しくないと、それが上評価されて表示されると言います ポインタアドレス。私はモックにしようとしています方法が構成されています 以下のようなので:
void myMethod(const CString & key, const CString & value);
これます:
MOCK_METHOD2(myMethod, void(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));
私は、次のような照合プログラムの多くの異なる組み合わせを試してみました
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));
上記の呼び出しのいずれも同じ結果を生成しました。他の誰の実行 この問題に?
このが出力されます:
Googleのモックは、次の2人の期待を試してみましたが、どれもマッチしません:
: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
アダム
解決
彼らはあなたのメソッドに渡されたときに、文字列のコピーを作成していないので、あなたが本当にそれらの値をチェックする必要がありますか?それは、以下の期待を書くために十分なはずます:
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));
...モックメソッドに与えられた文字列が実際にあなたが(アドレスによって検証)を期待するものであることを確認しますと、コピーではなく、または他の文字列ます。
前の缶詰マッチャはCString
と仕事をしない理由については、私はCString
がoperator()==
をオーバーライドしていないか、マッチャー実装はCString
のための明示的な特殊を持っていないので、それはどちらかである疑います。
他のヒント
別のエラーになってしまいました。 のそれは実際にバグをキャッチしました。のため息.... GoogleのモックがうまくCStringsを比較することができます。