Tôi đang sử dụng .net 4 với C#, EntityFramework 4 và Moq 4. Tôi đang cố gắng giả lập UnitOfWork, một Kho lưu trữ và cuối cùng là một cuộc gọi phương thức.Trouble Mocking Lambda với Kho lưu trữ Unitofwork
Đây là mã Tôi gặp rắc rối với
var unitOfWorkMock = new Mock<UnitOfWork>();
var cFieldRepositoryMock = new Mock<IRepository<CField>>();
System.Linq.Expressions.Expression<Func<CField, bool>> query = (x) => x.CID == c && x.FID == parentFID;
cFieldRepositoryMock.Setup(x => x.GetFirst(query));
Phương pháp Chữ ký cho GetFirst:
T GetFirst(Expression<Func<T, bool>> query = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null);
CField:
public class CField
{
public CField()
{
//do stuff
}
public int ID { get; set; }
public int FID { get; set; }
public int CID { get; set; }
}
Những gì tôi mong đợi xảy ra: tôi Tôi mong rằng tôi gọi phương thức GetFirst của cFieldRepositoryMock, nó sẽ là matc h biểu thức lambda tôi vượt qua trong biểu thức tôi đã xác định trong phần Thiết lập.
gì đang xảy ra: Tôi nhận được một lỗi biên dịch trên sự phân công Setup: "Một cây biểu thức không thể chứa một cuộc gọi hoặc gọi có sử dụng đối số tùy chọn"
tôi đang làm rõ điều gì sai, tôi chỉ cần không chắc chắn những gì. Bất kỳ lời khuyên nào được đánh giá cao, tôi khá mới để thử nghiệm đơn vị.
Cảm ơn! AFrieze
bạn có thể đăng bài khai báo nếu CField và chữ ký phương thức của getfirst()? – David
Xin chào David, tôi đã thêm thông tin được yêu cầu. Tôi không thể đăng toàn bộ lớp CField vì vậy tôi đã đăng các trường có liên quan với các loại chính xác và mức độ truy cập. – AFrieze
Bạn đã thử thêm một đối số cho orderBy-Argument (với It.IsAny <...> hoặc null)? Tôi không biết chính xác nhưng tôi nghĩ rằng Moq đang sử dụng biểu thức chính nó và tôi nghĩ rằng bạn phải cung cấp * tất cả * Đối số ở đây. – Carsten