【问题标题】:xUnit test asp net core Mapper not initializedxUnit测试asp net core Mapper未初始化
【发布时间】:2019-10-20 12:37:45
【问题描述】:

我正在测试这个方法,它最终会映射到我的 DTO

public async Task<IActionResult> Get()
        {
            var currencies = await _repository.GetCurrencies().ToListAsync().ConfigureAwait(false);
            if (currencies.Count == 0)
                return NoContent();

            return Ok(currencies.ToDto());
        }

作为此方法的回报,我收到以下错误:

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

我使用静态方法来做自动映射器

public static List<CurrencyDTO> ToDto(this List<Currency> model)
        {
            return Mapper.Map<List<Currency>, List<CurrencyDTO>>(model);
        }

当我只运行这个测试时它通过了,但是当我挤压每个人时它会说话

我已经尝试让构建器初始化映射器但继续出错,只有单独运行时测试才能通过

public class CurrenciesControllerTest
    {
        public CurrenciesControllerTest()
        {
            AutoMapperConfig.RegisterMappings();
        }
        private Mock<IReimbursementRepository> _repository = new Mock<IReimbursementRepository>();
        [Fact]
          public async Task Should_return_all_currencies()
        {
            var mock = Currencyfactory().AsQueryable().BuildMock();
            _repository.Setup(x => x.GetCurrencies()).Returns(mock.Object);

            var controller = new CurrenciesController(_repository.Object);
            var response = await controller.Get().ConfigureAwait(false) as OkObjectResult;`enter code here`

            Assert.Equal(response.StatusCode, (int)HttpStatusCode.OK);
        }
    }

【问题讨论】:

  • 当你说当我挤压每个人时它会说话你的意思是“当我运行所有测试时这个会抛出一个错误”?

标签: c# unit-testing testing xunit


【解决方案1】:

我的解决方案,配置 AutoMapperConfig

 public class AutoMapperConfig
    {
        public static object thisLock = new object();
        public static void Initialize()
        {
            lock (thisLock)
            {
                AutoMapper.Mapper.Reset();
                AutoMapper.Mapper.Initialize(cfg => { });
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2021-10-25
    • 2019-08-10
    相关资源
    最近更新 更多