MVC Core 2.0单元测试和自动映射器

Nap*_*nes 3 unit-testing automapper asp.net-core

我试图对使用Automapper ProjectTo的方法进行单元测试,但不确定如何在MVC Core中注册映射。我正在使用内置的单元测试。

以下是我的单元测试。

 [TestClass]
public class BusinessGenderServiceTest
{
    [ClassInitialize]
    public static void Init(TestContext context)
    {

    }
    [TestMethod]
    public void GetTest()
    {
        var options = new DbContextOptionsBuilder<GotNextDbContext>()
            .UseInMemoryDatabase(databaseName: "GetTest")
            .Options;

        using (var context = new GotNextDbContext(options))
        {


            context.GenderLanguage.Add(new GenderLanguage { Id = 1, Name = "Male", Language = 1 });
            context.GenderLanguage.Add(new GenderLanguage { Id = 2, Name = "Female", Language = 1 });
            context.GenderLanguage.Add(new GenderLanguage { Id = 3, Name = "Hombre", Language = 2 });
            context.GenderLanguage.Add(new GenderLanguage { Id = 4, Name = "Hombre", Language = 2 });
            context.SaveChanges();
        }
            using (var context = new GotNextDbContext(options))
            {
                var service = new GenderService(context);
                var result = service.Get(1);
                Assert.AreEqual(2, result.Count());
            }

    }
}
Run Code Online (Sandbox Code Playgroud)

运行测试时出现以下错误:

消息:测试方法GotNext.Test.BusinessGenderServiceTest.GetTest抛出异常:

System.InvalidOperationException:映射器未初始化。用适当的配置调用初始化。如果您尝试通过容器或其他方式使用mapper实例,请确保没有对静态Mapper.Map方法的任何调用,并且如果您使用的是ProjectTo或UseAsDataSource扩展方法,请确保传递适当的IConfigurationProvider实例。

Nap*_*nes 8

我可以通过在每个测试类的Init方法中配置和初始化自动映射器来解决此问题。

例如

[ClassInitialize]
    public static void Init(TestContext testContext)
    {
        var mappings = new MapperConfigurationExpression();
        mappings.AddProfile<LocationProfile>();
        mappings.AddProfile<CompanyProfile>();
        Mapper.Initialize(mappings);
    }
Run Code Online (Sandbox Code Playgroud)