You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoMapper配置测试时动态传递类型参数问题求解

问题原因

C#泛型方法的类型参数必须在编译阶段确定,你通过TestCase传入的toType是运行时才会被解析的Type实例,无法直接传入Map<toType>()作为泛型参数——toType.GetType()返回的是RuntimeType类型,显然也不是你要映射的目标类型,自然没法正常工作。

解决方案

AutoMapper原生提供了非泛型版本的Map重载,专门用于运行时动态指定映射类型的场景,不需要用反射构造泛型方法,直接调用即可:

[TestCase(typeof(Team), typeof(TeamDTO))]
[TestCase(typeof(TeamManager), typeof(TeamManagerDTO))]
public void AutoMapperTests(Type toType, Type fromType)
{
    // 若被测类型没有无参构造函数,可手动构造测试实例替代Activator.CreateInstance
    var fromObject = Activator.CreateInstance(fromType);
    // 调用非泛型重载,依次传入源对象、源类型、目标类型
    var toObject = mapper.Map(fromObject, fromType, toType);

    // 调整断言顺序,先判空再校验类型,避免空引用异常
    Assert.NotNull(toObject);
    Assert.That(toObject.GetType(), Is.EqualTo(toType));
}

补充说明:如果一定要用泛型版Map方法,也可以通过反射在运行时构造泛型方法调用,但这种写法冗余且有额外性能开销,完全没有必要,优先用官方提供的非泛型重载即可。

内容的提问来源于stack exchange,提问作者Conway Stern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 23:42:20