我試圖寫它看起來像這樣的方法的單元測試:中起訂量
public int Save(IEnumerable<int> addedIds, IEnumerable<int> removedIds)
{
var existingIds = repository.Get();
IEnumerable<int> ids = existingIds.Except(removedIds).Union(addedIds));
return repository.Create(ids);
}
中起訂量的測試看起來是這樣的:
repository.Setup(r => r.Get()).Returns(CreateList());
service.Save(addedIds, removedIds);
repository.Verify(r => r.Create(It.Is<IEnumerable<int>>(l => VerifyList(l))));
這種失敗與此錯誤,並VerifyList()
不會被調用:
上模擬預計調用至少一次,但從來沒有 進行:
r => r.Create(It.Is<IEnumerable'1>(list => VerifyList(list)))
演出調用:
IRepo.Create(System.Linq.Enumerable+<UnionIterator>d__88'1[System.Int32])
,作爲調用類型不是IEnumerable<int>
但實際上System.Linq.Enumerable+<UnionIterator>d__88'1[System.Int32])
,測試失敗。 (通過測試步進,一切正常發生的事情,結果如預期)
如果我在測試中的方法調用ids.ToList()
,這些都是結果:在模擬
預計調用至少一次,但從未進行:
r => r.Create(It.Is<List'1>(l => VerifyList(l)))
演出調用:
IRepo.Create(System.Collections.Generic.List'1[System.Int32])
這有什麼辦法嗎?或者我做錯了什麼?
編輯:事實證明,我在我的VerifyList方法中有一個錯誤,所以它返回false,但Moq沒有給我這些信息。該類型的差異是一個紅色的鯡魚..
謝謝,那個測試通過我的版本的Moq。我仍然不明白爲什麼我的失敗.. – stuartd
這很奇怪。你能更新Moq嗎?你正在使用哪個版本的Moq? – Markus
我在我的VerifyList方法中發生了一個錯誤,事實證明,它畢竟是被調用的。感謝您的幫助.. – stuartd