Tôi đã đọc rất nhiều câu hỏi khác về chủ đề này và tôi vẫn không thể tìm ra giải pháp cho vấn đề của mình, vì vậy tôi đã quyết định để lộ trường hợp của tôi.Moq.Mock <Expression <Func<T,bool> >>() - cách thiết lập biểu thức thành mô hình bằng cách sử dụng Moq
Tôi có giao diện này
public interface IRepository<T> where T : class, IEntity
{
IQueryable<T> Find(Expression<Func<T, bool>> predicate);
T FindIncluding(int id, params Expression<Func<T, object>>[] includeProperties);
}
Và đây là cấu trúc cơ bản của phương pháp có chứa các Mock mà tôi muốn thiết lập
public PeopleController CreatePeopleController()
{
var mockUnitofWork = new Mock<IUnitOfWork>();
var mockPeopleRepository = new Mock<IRepository<Person>>();
mockPeopleRepository.Setup(r=>r.Find().Returns(new Person(){});
mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
return new PeopleController(mockUnitofWork.Object);
}
Tôi đã cố gắng để thiết lập các Mock sử dụng theo cách này:
public PeopleController CreatePeopleController()
{
var mockUnitofWork = new Mock<IUnitOfWork>();
var mockPeopleRepository = new Mock<IRepository<Person>>();
mockPeopleRepository.Setup(r=>r.Find(It.isAny<Expression<Func<Person,bool>>>()).Single()).Returns(new Person(){});
mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
return new PeopleController(mockUnitofWork.Object);
}
Nhưng hệ thống luôn ném cùng ngoại lệ "System.NotSup portedException: Biểu hiện tham chiếu một phương pháp mà không thuộc về các đối tượng chế giễu .... "
Ngoài ra tôi muốn thêm rằng tôi đang sử dụng MSTest và Moq
Tôi biết rằng thiết lập một Mock sử dụng biểu thức không phải là dễ dàng và không được đề xuất, nhưng điều này rất quan trọng đối với tôi bởi vì "Tìm" là một phương pháp mà tôi sử dụng rất nhiều trong ứng dụng của tôi
Erik chỉ thực hiện giải pháp của bạn và công việc của mình .. Cảm ơn bạn Cứu giúp!!! :) – gustavotroconis
Vui vì nó đã giúp. :) –
@gustavotroconis nếu câu trả lời này giải quyết được vấn đề của bạn, bạn có thể chấp nhận nó bằng cách nhấp vào dấu kiểm bên cạnh nó. Khi bạn đặt thêm câu hỏi, "chấp nhận%" sẽ xuất hiện bên dưới hình đại diện của bạn và% cao hơn khuyến khích người khác trả lời câu hỏi của bạn. –