Предполагая, что у вас достаточно контроля над методом GetRepository()
, чтобы it вернул ваш репозиторий, имитировать сам метод довольно просто (если немного многословно). Я просто сбросил метод GetAll
в интерфейс под названием IRepository
, и вот как выглядит макет. Внутри метода Returns
у вас есть доступ к каждому из параметров для выполнения или игнорирования по вашему усмотрению.
var mock = new Moq.Mock<IRepository>();
mock.Setup(a => a.GetAll<int>(It.IsAny<Expression<Func<int, bool>>>(), It.IsAny<Func<IQueryable<int>, IOrderedQueryable<int>>>(), It.IsAny<Func<IQueryable<int>, IIncludableQueryable<int, object>>>(), It.IsAny<bool>()))
.Returns<Expression<Func<int, bool>>, Func<IQueryable<int>, IOrderedQueryable<int>>, Func<IQueryable<int>, IIncludableQueryable<int, object>>, bool>((param1, param2, param3, param4) =>
{
return new[] { 1, 2, 3 }.AsQueryable();
});
var result = mock.Object.GetAll<int>();
Отсюда мы не сможем помочь, не увидев больше кода. В абстрактных терминах, однако, вы возьмете свой mock.Object
(который имеет тип IRepository
) и передадите его в любую коллекцию, из которой извлекает GetRepository (). Также обратите внимание, конечно, что я использовал int для универсального параметра - вы замените его любым типом, который вы используете. Может быть возможно создать макет, который принимает общие параметры, но, надеюсь, в этом не будет необходимости!