c# – AutoMapperMappingException – 缺少类型映射配置或不支持
当我在我的代码中实现IReadOnlyList时,我的单元测试抛出了AutoMapperMappingException.
从挖掘文章和文档,我的猜测是AutoMapper需要对只读类型进行特殊编码.这会是什么样的? 注意:我尝试了Mapper.AssertConfigurationIsValid();正如另一篇文章所建议,但没有任何改进
Mapper.Initialize(cfg => cfg.CreateMap<ContractDto,Contract>()); Mapper.Initialize(cfg => cfg.CreateMap<PartDto,Part>()); [TestMethod] public void CreateOrder_ValidContract_CreatesNewOrder() { //Arrange var orderService = new OrderService(); var contractService = new ContractService(_contractRepository); var contract = contractService.GetById(ValidContractId); // Act var newOrder = orderService.CreateOrder(contract); // Assert Assert.IsInstanceOfType(newOrder,typeof(Order)); Guid guidOut; Assert.IsTrue(Guid.TryParse(newOrder.OrderId,out guidOut)); Assert.AreEqual(newOrder.Status,ContractStatus.New); Assert.IsInstanceOfType(newOrder.Items,typeof(IReadOnlyList<OrderItem>)); } ContractService类: public Contract GetById(string contractId) { var contractDto = _contractRepository.GetById(contractId); var contract = Mapper.Map<ContractDto,Contract>(contractDto); Mapper.AssertConfigurationIsValid(); return contract; } 合同类: public class Contract { public string ContractId { get; set; } public DateTime ExpirationDate { get; set; } } ContractDto类: public class ContractDto { public string ContractId { get; set; } public DateTime ExpirationDate { get; set; } } 解决方法
你的问题是你多次调用Mapping.Initialize:它不是附加的,所以你要覆盖以前的映射,这就是你将地图从ContractDto丢失到Contract的原因
因此,在测试的Setup方法中,您应该像这样调用它: Mapper.Initialize(cfg => { cfg.CreateMap<ContractDto,Contract>(); cfg.CreateMap<PartDto,Part>(); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |