3

moqの使用時に奇妙な問題があります。

あるプロジェクトで、メソッドが呼び出されたことを確認しようとすると、呼び出されていないと表示されます。テストをデバッグすると、明らかにメソッドが呼び出されます。

これは、キャッシュに何かを追加したかどうかを確認したい単純なキャッシュ オブジェクトです。Add、Contains、および Get メソッドがあります。

私の検証は、次の方法で正常に機能します。

bool Contains(string key);
T Get<T>(string key);

しかし、これではありません:

void Add(string key, object objectToCache, CacheItemPolicy policy);

私はこのようにメソッドに与える正確な値を試してみました:

mockedCache.Verify(p => p.Add(LOCATION_CACHE_KEY, locations, policy), Times.Once());

It.IsAny の使用

mockedCache.Verify(p => p.Add(It.IsAny<string>(), It.IsAny<IEnumerable<string>>(),
     It.IsAny<CacheItemPolicy>()), Times.Once());

そして、何を試しても、0回呼び出されたという応答が得られます。

私はこれまでにこの行動を見たことがありません。誰が何が悪いのか教えてもらえますか?

ありがとう

マイケル

更新: @SergRogovtsev が示唆したように、生成された出力 moq を見ました。

私のメソッドはIEnumerableではなくListで呼び出されました

4

2 に答える 2

0

見てきたように、Moq は、渡されたパラメーターの正確な型をチェックしていません。単に、パラメーターがアサートしている型から派生していることだけではありません。その機能が必要な場合は、次のようなものを使用する必要がある場合があります。

mockedCache.Verify(p => p.Add(It.IsAny<string>(), It.Is<object>(o => o is IEnumerable<string>), It.IsAny<CacheItemPolicy>()), Times.Once());

それ以外の場合は、更新されたバージョンの Moq を取得することを検討できます-元のシナリオ (It.IsAny<IEnumerable<string>>アサーションで使用) をテストしましたが、Moq v4.0 で正しく動作します)

于 2012-08-14T07:59:43.923 に答える