xUnit тестовый asp core core Mapper не инициализирован - PullRequest
0 голосов
/ 05 июня 2019

Я тестирую этот метод, который в конце концов делает сопоставление с моим 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 не инициализирован. Вызовите Initialize с соответствующей конфигурацией. Если вы пытаетесь использовать экземпляры Mapper через контейнер или иным образом, убедитесь, что вы не иметь никаких вызовов статических методов 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);
        }
    }

1 Ответ

0 голосов
/ 05 июня 2019

мое решение, настройте AutoMapperConfig

 public class AutoMapperConfig
    {
        public static object thisLock = new object();
        public static void Initialize()
        {
            lock (thisLock)
            {
                AutoMapper.Mapper.Reset();
                AutoMapper.Mapper.Initialize(cfg => { });
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...