メソッドを検証しようとしているのがモック内で呼び出されていますが、呼び出されていない例外が発生し続けている理由が分かりません。次のように問題の方法は次のとおりです。Moqで呼び出されたメソッドを確認する
public class CustomerSyncEngine {
public CustomerSyncEngine(ILoggingProvider loggingProvider, ICrmProvider crmProvider, ICacheProvider cacheProvider) {
Logger = loggingProvider;
CrmProvider = crmProvider;
CacheProvider = cacheProvider;
}
public virtual void SyncPickLists() {
Logger.LogBeginPicklistSync();
// get all the pick lists from the local cache
var localCachePickLists = CacheProvider.GetPickLists().ToList();
// get all the pick lists from the remote system
var crmPickLists = CrmProvider.GetPickLists().ToList();
// build a sync plan
var changes = BuildPickListUpdatePlan(localCachePickLists, crmPickLists).ToList();
// run the sync
RunPickListSync(changes);
Logger.LogEndPicklistSync();
}
}
が、私は、テストので、同じように書いた:
[TestMethod]
public void TestSyncPickLists() {
// arrange
var mockCrm = new Mock<ICrmProvider>();
mockCrm.Verify(x => x.GetPickLists(), Times.Once(), "ICrmProvider.GetPickLists not called");
var mockCache = Mock.Of<ICacheProvider>();
var mockLogger = Mock.Of<ILoggingProvider>();
// act
var syncEngine = new CustomerSyncEngine(mockLogger, mockCrm.Object, mockCache);
syncEngine.SyncPickLists();
// assert
mockCrm.VerifyAll();
}
私はそれを実行すると、テストは、私が確認しに指定されたメッセージ()で失敗します。だから私はブレークポイントの束を設定し、私はテストがsyncEngine.SyncPickLists()メソッドを呼び出すことはありませんが、それは私に混乱していることがわかります。だから私は2つのVerify()& VerifyAll()ステートメントをコメントアウトして、今私はものが正しく呼び出されて参照してください。私はここで何が欠けていますか? Quickstartとthis threadに表示されている内容を正確に実行しているようです。
あなたは 'SyncPickLists'の呼び出しの後に' Verify'を呼び出します - 遅延したものではありません。あなたの呼び出しの下の行を 'SyncPickLists'に移動し、渡す必要があります。 – Tejs
ファンタスティック...それを修正! –