在构造函数中赋值IMappingEngine,只在从单元测试运行时才会导致映射异常

本文关键字:异常 映射 运行时 构造函数 赋值 IMappingEngine 单元测试 | 更新日期: 2023-09-27 18:14:57

我有一个单元测试-我在设置中执行AutoMapperConfiguration。然后我将IMappingEngine设置为私有属性在我的类的构造函数中,我在这里做映射。如果我使用这个属性,单元测试就会失败,但是使用automapper的静态方法就可以了。在运行实际程序时,这两种方法都可以正常工作。我能看到的唯一区别是单元测试在一个单独的程序集中。启用CLS遵从性。

public class AutomapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.AddProfile<AclassMappingProfile>();
        });
    }
    public static void Reset()
    {
        Mapper.Reset();
    }
}
public class AssetModelFactoryTests
{
    [SetUp]
    public void SetUp()
    {
        AutomapperConfiguration.Configure();
    }
    [Test]
    public void TestA()
    {
        var a = new A();
    }
}
public class A
{
    private IMappingEngine _mappingEngine;
    public A()
    {
         _mappingEngine = Mapper.Engine;
    }
    public void DoA()
    {
         Mapper.Map<Destination>(source); //works
         _mappingEngine.Map<Destionation>(source); //Throws mapping not supported
    }
}

在构造函数中赋值IMappingEngine,只在从单元测试运行时才会导致映射异常

如果您计划测试这些方法,就不要使用静态的Mapper.*方法。在任何地方使用IMappingEngine,在应用程序启动时配置它,并通过适当的依赖倒置机制注入。