Im использование Moq для создания mocks набора данных.Создать выражение <Func<,>> используя отражение
Я создал небольшой вспомогательный класс, который позволяет мне иметь в памяти вместо базы данных, которая делает модульное тестирование бриз. Таким образом, я могу добавлять и удалять элементы из моего набора данных, это позволяет мне проверять мои вставки и удалять вызовы служб.
Во время установки Ложная У меня есть строка, которая выглядит следующим
this.Setup(i => i.AcademicCycles).Returns(mockStore.GetList<AcademicCycle>());
Мой издеваться имеет много свойств, так что я хотел бы выполнить этот шаг настройки с помощью отражения. Мне удалось сделать Returns
часть процесса, работающего через отражение, но я застрял на методе лямбда до Setup
.
Setup
принимает
Expression<Func<GoalsModelUnitOfWork, IQueryable<AcademicCycle>>>
что соответствует i => i.AcademicCycles
, и я хотел бы создать это динамически. С помощью отражения я следующее:
Название объекта: «AcademicCycles»
Тип IQueryable<AcademicCycle>
Тип AcademicCycle
У меня также есть экземпляр i
в операторе лямбда который является GoalsModelUnitOfWork
На самом деле результат Expression.Lambda может быть приведен к 'Expression>', если вы статически знать параметры и типы возвращаемых значений. Internal Expression.Lambda действительно создает экземпляр соответствующего типа 'Expression >', хотя тип возврата Expression.Lambda слабо типизирован. –
itowlson
Также я не думаю, что вам нужны две средние линии. Из теста в более простом случае следует работать 'var lambda = Expression.Lambda (параметр, свойство)' (Expression.Lambda разработает тип делегата из типов и свойств). Однако мой тестовый код немного отличался от вашего и использовал более простые типы, поэтому ваш пробег может меняться ...! – itowlson