c# – 如何解决使用Moq和IDataReader的问题
发布时间:2020-12-15 17:25:46 所属栏目:百科 来源:网络整理
导读:关于IDataReader我遇到了Moq和Automapper的问题. 我在stackoverflow上找到了一个例子并修改了代码. public static IDataReader MockIDataReaderT(ListT ojectsToEmulate) where T : class { var moq = new MockIDataReader(); // This var stores current po
关于IDataReader我遇到了Moq和Automapper的问题.
我在stackoverflow上找到了一个例子并修改了代码. public static IDataReader MockIDataReader<T>(List<T> ojectsToEmulate) where T : class { var moq = new Mock<IDataReader>(); // This var stores current position in 'ojectsToEmulate' list var count = 0; moq.Setup(x => x.Read()) // Return 'True' while list still has an item .Returns(() => count < ojectsToEmulate.Count) // Go to next position .Callback(() => count++); var properties = typeof (T).GetProperties(); foreach (PropertyInfo t in properties) { var propName = t.Name; moq.Setup(x => x[propName]).Returns(() => ojectsToEmulate[count].GetType().GetProperty(propName).GetValue(ojectsToEmulate[count],null)); } return moq.Object; } } 我的映射: Mapper.Configuration.CreateMap(typeof(IDataReader),typeof(IEnumerable<T>)); var result = Mapper.Map<IDataReader,IEnumerable<T>>(reader); 我在这里遇到的问题是我的结果有1个结果是cityModel但它的所有属性都是null.如果我检查我的模拟读者的值,如读者[“名称”],我得到了“Alings?s”值,因此模拟是正确的,但Automapper接缝有问题. var cityModel = new CityModel(); cityModel.Name = "Alings?s"; cityModel.Id = "SE"; cityModel.CountryId = "SE"; var cityModels = new List<CityModel>(); cityModels.Add(cityModel); _fakeReader = MockTester.MockIDataReader(cityModels); 代码工作正常,没有抛出异常,但映射器给了我一个没有的对象 这可能有什么不对? 解决方法
Automapper在内部使用
int indexer的IDataReader,因此您需要在其上调用Setup而不是Item [String].
检查Automapper的源代码,您需要设置一些其他方法才能使其工作: //... var index = 0; foreach (PropertyInfo t in properties) { var propName = t.Name; int index1 = index; // avoid access to modified closure moq.Setup(x => x.GetFieldType(index1)).Returns(t.PropertyType); moq.Setup(x => x.GetName(index1)).Returns(propName); moq.Setup(x => x[index1]) .Returns(ojectsToEmulate[count] .GetType() .GetProperty(propName).GetValue(ojectsToEmulate[count],null)); index++; } moq.Setup(x => x.FieldCount).Returns(properties.Length); //... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- DWR3实现服务器端向客户端精确推送消息
- 使用PreparedStatementSetter 设置参数跟 表字段
- PostgreSQL 数据库访问配置
- 详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
- ruby-on-rails – Rails:将Tempfile传递给Sidek
- 在drawable下建立xml文件时,怎样可以选择根元素
- 详解vuex中mapState,mapGetters,mapMutations,ma
- ruby – RSpec Stubbing:按顺序返回
- Oracle数据库truncate table后恢复原来数据的方法
- c# – 通用Windows应用程序如何具有多个独立的窗
热点阅读