正在检查自定义AutoMapper TypeConverter中目标属性的属性

问题描述

|| 我有一个自定义类型转换器,该转换器将UTC DateTime属性转换为公司的本地时间(在这里讨论:使用AutoMapper全局应用值解析器)。 现在,如果视图模型的属性标记自定义
displayInLocalTime
属性,则我只希望此转换器执行其操作。 在类型转换器内部,如果实现原始的
ITypeConvert<TSource,TDestination>
接口,则可以检查要转换的目标视图模型属性是否具有以下属性
public class LocalizedDateTimeConverter : ITypeConverter<DateTime,DateTime> 
{
    public DateTime Convert(ResolutionContext context)
    {
        var shouldConvert = context.Parent.DestinationType
                                .GetProperty(context.MemberName)
                                .GetCustomAttributes(false)[0].GetType() == typeof(displayInLocalTimeAttribute);
        if (shouldConvert) {
            // rest of the conversion logic...
        }
    }
}
因此,此代码工作得很好(显然,那里有更多的错误检查和变量,以提高可读性)。 我的问题: 这是解决这个问题的正确方法吗?我还没有在AutoMapper代码库中发现任何乱搞或乱写的东西。 我将如何对此进行单元测试?我可以在传递的
ResolutionContext
上设置父目标类型,但有点怪癖,但是不能设置成员名称,因为
IMemberAccessor
的所有实现者都在AutoMapper内部。这以及设置非常丑陋的事实,使我对此并没有真正的支持,或者我正在做错所有事情。 我正在使用最新的TeamMity版本的AutoMapper BTW。     

解决方法

不要对此进行单元测试,请使用集成测试。只需编写一个实际调用AutoMapper的映射测试,即可从外部验证此类型转换器支持的任何用例。 通常,对别人的API扩展点进行单元测试对我来说没有太大的价值。相反,我尝试穿过前门,并确保正确配置了扩展点。