2017-01-23 49 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

通过使用该一个可以很容易地断言如果上型或不施加转换器 –