2016-07-22 23 views
6

IReadOnlyListをコードに実装すると、ユニットテストでAutoMapperMappingExceptionがスローされました。AutoMapperMappingException - タイプマップの設定が欠落しているか、サポートされていないマッピング

記事やドキュメントを掘り下げて見ると、AutoMapperにはreadonlyタイプの特別なコーディングが必要です。これはどのように見えますか?

注:私はMapper.AssertConfigurationIsValid();を試してみましたが、改良はありません。

テスト名:CreateOrder_ValidContract_CreatesNewOrderテスト フルネーム:ACME.Maintenance.Domain.Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder テストソース:C:\ユーザーはプロジェクト\ ACME.Maintenance \ ACME \ Visual Studioの 2015 \ドキュメント\私\ .Maintenance.Domain.Test \ OrderServiceTest.cs :ライン65の試験結果:失敗した試験時間:0:00:00.0233941

結果のStackTrace: ACME.Maintenanceでlambda_methodで(閉鎖、ContractDto、契約 、ResolutionContext) .Domain.ContractService.GetById(String contractId ) でのC:\ユーザーは、私のVisual Studio \ \ドキュメントを\プロジェクト\ 2015 \ ACME.Maintenance \ ACME.Maintenance.Domain ContractService.cs \:ライン ACME.Maintenance.Domain.Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrderで( ) C:¥Users¥me¥documents¥visual studio 2015 \ Projects \ ACME.Maintenance \ ACME.Maintenance.Domain.Test \ OrderServiceTest.cs:line 69結果メッセージ:テストメソッド ACME.Maintenance.Domain。 Test.OrderServiceTest.CreateOrder_ValidContract_CreatesNewOrder 例外がスローされました:AutoMapper.AutoMapperMappingException:タイプが見つからない マップの構成またはサポートされていないマッピング。

マッピングタイプ:ContractDto - >契約

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

    } 

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

} 
+0

してくださいあなたのクラスとそのミスマップに関する情報を含む例外の全文 – stuartd

+0

完全な例外とクラスを含む元の投稿が更新されました。 –

答えて

7

あなたの問題はあなたがMapping.Initializeを複数回呼び出しているということです。それは添加物ではないので、以前のマッピングを上書きしている、とあなたはContractDtoからContractにマップを失っている理由です

だからあなたのテストのSetup方法では、あなたはこのようにそれを呼び出す必要があります。sh

Mapper.Initialize(cfg => { 
    cfg.CreateMap<ContractDto, Contract>(); 
    cfg.CreateMap<PartDto, Part>(); 
}); 
関連する問題