で可算のリストを確認:私はこのようになります方法のためのユニットテストを書くことをしようとしている部品番号
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