2017-01-23 87 views
0

我需要辦理一些複雜的邏輯來創建地圖,所以我使用了自定義類型轉換爲以下類型的應用轉換器如何斷言:如果使用流利的斷言

cfg.CreateMap<ConsumerRequest,IEnumerable<ProviderRequest>>().ConvertUsing<RequestConverter>(); 

我使用fluentassertions單元測試並且想要聲明ConsumerRequest已經應用了RequestConverter,但不知道該怎麼做,我想我應該可以正確地使用一個擴展方法,它將以某種方式聲明相同的消息,但不知道如何實現這一點,任何幫助都將得到真正的讚賞。

回答

0

創建於IMapper一個擴展方法如下:

public static AutoMapperTypeConverterAssertions<TDestinationModel>ForType<TDestinationModel>(this IMapper subject) 
{ 
    return new AutoMapperTypeConverterAssertions<TDestinationModel>(subject); 
} 

public class AutoMapperTypeConverterAssertions<TDestinationModel> : ReferenceTypeAssertions<object, AutoMapperTypeConverterAssertions<TDestinationModel>> 
{ 
    public AutoMapperTypeConverterAssertions(object subject) 
    {    
    Subject = subject; 
    } 

    protected override string Context => "auto mapper type converter"; 

    public AndConstraint<AutoMapperTypeConverterAssertions<TDestinationModel>> ShouldHaveTypeConverterApplied<TSourceModel, TConverterType>(
    string because = "", params object[] becauseArgs) 
    {    
     var mapper = Subject as IMapper; 
     var foundTypeInConfig = mapper 
     .ConfigurationProvider 
     .FindTypeMapFor<TSourceModel, TDestinationModel>() 
     .TypeConverterType; 

     Execute.Assertion 
     .BecauseOf(because, becauseArgs) 
     .ForCondition(foundTypeInConfig == typeof(TConverterType)) 
     .FailWith("Expected the mapping for {0} to contain {1} AutoMapper Type Converter, but was not found.", typeof(TDestinationModel).Name, typeof(TConverterType).Name); 

    } 
return new  AndConstraint<AutoMapperTypeConverterAssertions<TDestinationModel>>(this); 


} 
+0

通過使用該一個可以很容易地斷言如果上型或不施加轉換器 –