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

时间:2011-05-26 21:13:56

标签: automapper

我有一个自定义类型转换器,可将UTC DateTime属性转换为公司的本地时间(在此处讨论:Globally apply value resolver with 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...
        }
    }
}

所以这段代码工作正常(显然有更多的错误检查和变量在那里以便于阅读)。

我的问题:

  1. 这是正确的方法吗?我还没有找到任何谷歌搜索或通过AutoMapper代码库进行搜索。
  2. 我如何对此进行单元测试?我可以在传递的ResolutionContext上设置父目标类型,但是无法设置成员名称,因为IMemberAccessor的所有实现者都是AutoMapper内部的。这个,以及它的设置非常丑陋的事实,这使得我并没有真正支持它,或者我认为这一切都错了。
  3. 我正在使用AutoMapper的最新TeamCity版本,BTW。

1 个答案:

答案 0 :(得分:1)

请勿对此进行单元测试,请使用集成测试。只需编写一个实际调用AutoMapper的映射测试,验证无论这种类型转换器用于支持外部工作的用例。

作为一般规则,对其他人的API的扩展点进行单元测试对我没有多大价值。相反,我尝试通过前门并确保我也正确配置了扩展点。