Tôi đang cố gắng để viết một bài kiểm tra đơn vị cho một phương pháp mà trông như thế này:Thẩm định một danh sách liệt kê trong Moq
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);
}
Các thử nghiệm trong Moq trông như thế này:
repository.Setup(r => r.Get()).Returns(CreateList());
service.Save(addedIds, removedIds);
repository.Verify(r => r.Create(It.Is<IEnumerable<int>>(l => VerifyList(l))));
này thất bại , với lỗi này , và VerifyList()
không bao giờ được gọi là:
dự kiến gọi trên giả ít nhất một lần, nhưng không bao giờ được thực hiện :
r => r.Create(It.Is<IEnumerable'1>(list => VerifyList(list)))
lời gọi Thực hiện:
IRepo.Create(System.Linq.Enumerable+<UnionIterator>d__88'1[System.Int32])
Như kiểu gọi không phải là IEnumerable<int>
nhưng là trên thực tế System.Linq.Enumerable+<UnionIterator>d__88'1[System.Int32])
, thử nghiệm thất bại. (Bước qua kiểm tra, tất cả mọi thứ đang diễn ra một cách chính xác và kết quả là như dự kiến)
Nếu tôi gọi ids.ToList()
trong phương thức dưới kiểm tra, đây là những kết quả:
dự kiến gọi trên giả ít nhất một lần , nhưng không bao giờ được thực hiện:
r => r.Create(It.Is<List'1>(l => VerifyList(l)))
lời gọi thực hiện:
IRepo.Create(System.Collections.Generic.List'1[System.Int32])
Có cách nào vòng này không? Hay tôi đang làm gì sai?
Chỉnh sửa: nó chỉ ra tôi đã có một sai lầm trong phương pháp VerifyList của tôi vì vậy nó đã trở về sai, nhưng Moq đã không cho tôi thông tin đó. Sự khác biệt loại là một cá trích đỏ ..
Cảm ơn, kiểm tra đó không phù hợp với phiên bản Moq của tôi. Tôi vẫn không hiểu tại sao tôi lại thất bại. – stuartd
Thật lạ lùng. Bạn có thể cập nhật Moq? Bạn đang sử dụng phiên bản Moq nào? – Markus
Tôi đã gặp lỗi trong phương thức VerifyList của mình, điều mà hóa ra nó đã được gọi sau khi tất cả. Cảm ơn sự giúp đỡ của bạn .. – stuartd