Я пробовал следовать за guide с помощью Entity Framework и Moq, чтобы издеваться над моим контекстом, чтобы протестировать мой репозиторий.Получить IQueryable из Moq mockset
Я в настоящее время возникают проблемы тестирования мой GetSingle
запрос из моего репозитория:
public Customer GetSingle(int id, HotelBookingContext context = null, params Expression<Func<Customer, object>>[] navigationProperties)
{
using (var tempContext = context ?? new HotelBookingContext())
{
IQueryable<Customer> dbQuery = tempContext.Set<Customer>();
foreach (Expression<Func<Customer, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include(navigationProperty);
return dbQuery
.AsNoTracking()
.FirstOrDefault(x => x.Id == id);
}
}
с помощью следующего теста:
public void GetSingle_QueryingASingleCustomer_ReturnsASingleCustomer()
{
var cus = new Customer() { Email = "testMail", Name = "testName", Id = 1 };
var customer = new List<Customer> {cus}.AsQueryable();
var mockSet = new Mock<DbSet<Customer>>();
mockSet.As<IQueryable<Customer>>().Setup(m => m.Provider).Returns(customer.Provider);
mockSet.As<IQueryable<Customer>>().Setup(m => m.Expression).Returns(customer.Expression);
mockSet.As<IQueryable<Customer>>().Setup(m => m.ElementType).Returns(customer.ElementType);
mockSet.As<IQueryable<Customer>>().Setup(m => m.GetEnumerator()).Returns(customer.GetEnumerator());
var mockContext = new Mock<HotelBookingContext>();
mockContext.Setup(m => m.Customers).Returns(mockSet.Object);
var temp = _customerRepository.GetSingle(cus.Id, mockContext.Object);
Assert.AreEqual(temp.Name, cus.Name);
Assert.AreEqual(temp.Email, cus.Email);
Assert.AreEqual(temp.Id, cus.Id);
}
Если я отладки кода я замечаю, что в функции GetSingle
IQueryable
dbQuery
остается null
и поэтому не может использоваться в операторе возврата.
Почему это?
Однако, если я запускаю его с реальным контекстом, он отлично работает.
Это потому, что в настройке вы устанавливаете свойство '.Customers', а не' .Set() '. Moq не имеет понятия, что делать с этим, исходя из текущей настройки. –
Nkosi