【发布时间】:2016-12-16 19:56:46
【问题描述】:
我有一个定义如下的通用方法,它封装了对 AutoMapper 的调用。
public TOut CreateRequest<TOut, TModelIn>(TModelIn data)
{
...
return Mapper.Map<TModelIn, TOut>();
}
如果我调用Mapper.AssertConfigurationIsValid,那么我可以检查我的地图是否设置正确,但是我无法检查是否有人在未定义地图时添加了一行代码来尝试地图。
所以我希望能够扫描我的程序集并找到对上述方法的所有调用,提取正在使用的泛型类型,然后将这些类型连接到 Mapper.Map<Type1, Type2>(); 调用中。然后我可以调用Mapper.AssertConfigurationIsValid方法,并确保我的代码中的所有Maps确实已经被映射并且是有效的。
我们的想法是将其添加到 UnitTest 中,这样我就可以在让用户去测试它以查看会发生什么之前确定映射。
[更新] 我一直在考虑在我的单元测试中使用 Roslyn 来做到这一点。有谁知道如何通过 Roslyn 找到方法的调用,无论是直接调用还是通过参数列表?
【问题讨论】:
-
你可以在 Visual Studio 的 find all 方法中做正则表达式(或者偷懒,只找到所有的 'CreateRequest
-
我需要它在单元测试中自动运行,而不是手动运行。
-
我不确定您可以更改代码的哪一部分。你能不能修改泛型方法?如果可以的话,我建议启用嵌入到方法中的自动测试功能。如果您愿意,我可以尝试详细说明答案。
标签: c# automapper roslyn