gpt4 book ai didi

c# - AutoMapperMappingException - 缺少类型映射配置或不支持的映射

转载 作者:太空狗 更新时间:2023-10-29 20:16:12 26 4
gpt4 key购买 nike

当我在我的代码中实现 IReadOnlyList 时,我的单元测试抛出了一个 AutoMapperMappingException

通过深入研究文章和文档,我猜测 AutoMapper 需要对 readonly 类型进行特殊编码。这会是什么样子?

注意:我按照另一篇文章的建议尝试了 Mapper.AssertConfigurationIsValid();,但没有任何改进。

Test Name: CreateOrder_ValidContract_CreatesNewOrder Test FullName: ACME.Maintenance.Domain.Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder Test Source: C:\Users\me\documents\visual studio 2015\Projects\ACME.Maintenance\ACME.Maintenance.Domain.Test\OrderServiceTest.cs : line 65 Test Outcome: Failed Test Duration: 0:00:00.0233941

Result StackTrace: at lambda_method(Closure , ContractDto , Contract , ResolutionContext ) at ACME.Maintenance.Domain.ContractService.GetById(String contractId) in C:\Users\me\documents\visual studio 2015\Projects\ACME.Maintenance\ACME.Maintenance.Domain\ContractService.cs:line 34 at ACME.Maintenance.Domain.Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder() in C:\Users\me\documents\visual studio 2015\Projects\ACME.Maintenance\ACME.Maintenance.Domain.Test\OrderServiceTest.cs:line 69 Result Message: Test method ACME.Maintenance.Domain.Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder threw exception: AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

Mapping types: ContractDto -> Contract

ACME.Maintenance.Domain.DTO.ContractDto -> ACME.Maintenance.Domain.Contract

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>));

}

契约(Contract)服务类:

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>();
});

关于c# - AutoMapperMappingException - 缺少类型映射配置或不支持的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38532756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com