如何验证是否已为所有用途创建了automapper映射?

时间:2012-08-05 15:53:23

标签: c# automapper roslyn

我希望有一个测试,验证每次使用Automapper.Mapper.Map<T1,T2>()时,我的Bootstrapper中都有相应的映射配置(AutoMapper.Mapper.CreateMap<T1,T2>())。

我正准备使用Roslyn与编译器连接并找到Map<>方法的所有用法,然后尝试使用这些实例进行映射。虽然这样可以解决问题,但我认为我宁愿使用已存在的东西。

这是否存在?如果没有,有没有比使用Roslyn更好的方法呢?

2 个答案:

答案 0 :(得分:1)

你正在深入研究元编程。

您可以做的最好的事情是将映射的类包含到一个或多个名称空间中,并检查这些名称空间中的所有类是否存在映射。为此,你不需要Roslyn,Cecil或其他任何东西。

如果你放弃编译时检查,至少你必须制定一些约定,如果你的约定定义得很好,你可以验证它们。

答案 1 :(得分:0)

问题是你无法确定 - 有很多情况下它不是确定性的(例如,类型Y的模型可能会传递给AutoMapper,向下转发为object

作为正常代码覆盖的一部分,您应该覆盖映射的实际消耗量。

这是否意味着每种映射方法的单元测试都是一个不同的问题......