使用Moq创建数据集的模拟。使用反射创建表达式<Func<,>>使用反射
我已经创建了一个小辅助类,它允许我有一个内存存储而不是一个使单元测试轻而易举的数据库。这样我可以添加和删除我的模拟数据集中的项目,这使我可以测试我的插入和删除服务调用。
在模拟的设置我有一条线,看起来像下面
this.Setup(i => i.AcademicCycles).Returns(mockStore.GetList<AcademicCycle>());
我假装有很多的属性,所以我想执行使用反射此设置步骤。我已经设法通过反射工作的Returns
部分工作,但我坚持在lambda方法Setup
。
Setup
需要一个
Expression<Func<GoalsModelUnitOfWork, IQueryable<AcademicCycle>>>
对应于i => i.AcademicCycles
,我想动态地创建这一点。使用反射我有以下几点:
属性的名称:“AcademicCycles”
类型IQueryable<AcademicCycle>
类型AcademicCycle
我也有i
的实例在lambda声明这是一个GoalsModelUnitOfWork
其实Expression.Lambda的结果可以转换为'表达>'如果以静态知道参数和返回类型。尽管Expression.Lambda的返回类型的输入类型很弱,但Expression.Lambda确实会构造适当的“Expression >”类型的实例。 –
itowlson
另外我不认为你需要中间两行。从更简单的情况下测试,'var lambda = Expression.Lambda(parameter,property)'应该可以工作(Expression.Lambda将从类型和属性中计算出委托类型)。不过,我的测试代码与您的测试代码略有不同,并且使用了更简单的类型,因此您的里程可能会有所不同...... – itowlson