Wenn ich IReadOnlyList
in meinem Code implementierte, warf mein Einheitstest AutoMapperMappingException
.AutoMapperMappingException - Fehlende Typzuordnungskonfiguration oder nicht unterstützte Zuordnung
Von graben durch Artikel und Dokumentation, meine Vermutung ist, dass AutoMapper spezielle Codierung für readonly
Typen benötigt. Wie würde das aussehen?
Hinweis: Ich habe versucht Mapper.AssertConfigurationIsValid();
als ein anderer Beitrag vorgeschlagen, aber keine Verbesserungen.
Testname: CreateOrder_ValidContract_CreatesNewOrder-Test Fullname: ACME.Maintenance.Domain.Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder -Test Quelle: C: \ Benutzer \ me \ Dokumente Visual Studio \ 2015 \ Projects \ ACME.Maintenance \ ACME .Maintenance.Domain.Test \ OrderServiceTest.cs : Linie 65 Test-Ergebnis: Failed Test Dauer: 0: 00: 00,0233941
Ergebnis Stacktrace: bei lambda_method (Closure, ContractDto, Vertrag , ResolutionContext) bei ACME.Maintenance .Domain.ContractService.GetById (String contractId) In C: \ Benutzer \ me \ Dokumente \ Visual Studio 2015 \ Projects \ ACME.Maintenance \ ACME.Maintenance.Domain \ ContractService.cs: Linie 34 bei ACME.Maintenance.Domain.Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder () in C: \ Benutzer \ ich \ Dokumente \ Visual Studio 2015 \ Projekte \ ACME.Maintenance \ ACME.Maintenance.Domain.Test \ OrderServiceTest.cs: Zeile 69 Ergebnis Nachricht: Testmethode ACME.Maintenance.Domain. Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder warf Ausnahme: AutoMapper.AutoMapperMappingException: Fehlender Typ Kartenkonfiguration oder nicht unterstützte Zuordnung.
Mapping-Typen: ContractDto -> Vertrag
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>));
}
Bauauftrags Klasse:
public Contract GetById(string contractId)
{
var contractDto = _contractRepository.GetById(contractId);
var contract = Mapper.Map<ContractDto, Contract>(contractDto);
Mapper.AssertConfigurationIsValid();
return contract;
}
Vertragsklasse:
public class Contract
{
public string ContractId { get; set; }
public DateTime ExpirationDate { get; set; }
}
ContractDto Klasse:
public class ContractDto
{
public string ContractId { get; set; }
public DateTime ExpirationDate { get; set; }
}
Bitte sh Der vollständige Text der Ausnahme - der Informationen darüber enthält, was das Mismapping ist - und Ihre Klassen. – stuartd
Aktualisierter Originalbeitrag mit vollständiger Ausnahme und Klassen. –