Unit testing 如何使用流畅的断言在类型上应用转换器

Unit testing 如何使用流畅的断言在类型上应用转换器,unit-testing,automapping,fluent-assertions,Unit Testing,Automapping,Fluent Assertions,我需要应用一些复杂的逻辑来创建映射,因此我使用了自定义类型转换器,如下所示: cfg.CreateMap<ConsumerRequest,IEnumerable<ProviderRequest>>().ConvertUsing<RequestConverter>(); public static AutoMapperTypeConverterAssertions<TDestinationModel>ForType<TDestinationM

我需要应用一些复杂的逻辑来创建映射,因此我使用了自定义类型转换器,如下所示:

cfg.CreateMap<ConsumerRequest,IEnumerable<ProviderRequest>>().ConvertUsing<RequestConverter>();
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);


}
cfg.CreateMap().ConvertUsing();

我在单元测试中使用fluentassertions,我想断言ConsumerRequest已经应用了RequestConverter,但不确定如何实现,我想我应该能够纠正一个扩展方法,该方法将在一些消息中声明相同的内容,但不确定如何实现,任何帮助都将非常感谢

在IMapper上创建了一个扩展方法,如下所示:

cfg.CreateMap<ConsumerRequest,IEnumerable<ProviderRequest>>().ConvertUsing<RequestConverter>();
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);


}
公共静态AutoMapperTypeConverterAssertionsForType(此IMapper主题)
{
返回新的AutoMapperTypeConverterAssertions(主题);
}
公共类AutoMapperTypeConverterAssertions:ReferenceTypeAssertions
{
公共AutoMapperTypeConverterAssertions(对象主题)
{            
主题=主题;
}
受保护的覆盖字符串上下文=>“自动映射器类型转换器”;
public和Constraint应保存已应用的类型转换器(
字符串,因为=”,参数对象[]因为搜索)
{            
var mapper=主题作为IMapper;
var foundTypeInConfig=映射器
.ConfigurationProvider
.FindTypeMapFor()的
.TypeConverterType;
执行.断言
.因为
.ForCondition(FoundTypeInFig==typeof(TConverterType))
.FailWith(“预期{0}的映射包含{1}自动映射类型转换器,但未找到。”,typeof(tdestationmodel).Name,typeof(TConverterType).Name);
}
返回新的AndConstraint(此);
}

通过使用此选项,可以轻松断言是否在类型上应用了转换器