Я немного новичок в модульном тестировании с xUnit, и у меня есть некоторые проблемы с AutoMapper. Я получаю Mapper уже инициализирован проблема.
Я использую Automapper 8.0.0., ASP.NET Core 2.2 и xUnit 2.4.1.
Я пишу юнит-тесты для моих контроллеров.
У меня есть модульные тесты в 3 разных классах. Каждый класс выглядит в основном так:
/* Constructor */
public ControllerGetTests()
{
/// Initialize AutoMapper
AutoMapper.Mapper.Reset();
MapperConfig.RegisterMaps();
/* Some mocking code here using Moq */
_controller = new MyController();
}
[Fact]
public async void Get_WhenCalled_ReturnsOkResult()
{
// Act
var okResult = await _controller.Get();
// Assert
Assert.IsType<OkObjectResult>(okResult);
}
/* etc. */
Все три класса похожи и являются базовыми тестами для контроллеров.
Все контроллеры используют AutoMapper.
Я использую тот же статический класс MapperConfig для регистрации моих отображений:
public static class MapperConfig
{
public static void RegisterMaps()
{
AutoMapper.Mapper.Initialize(config =>
{
config.CreateMap<SomeClass, SomeClassViewModel>();
config.CreateMap<SomeClassViewModel, SomeClass>();
});
}
}
Я вызываю этот метод в конструкторе каждого из 3 тестовых классов.
Перед вызовом я вызываю Mapper.Reset () - некоторые ответы здесь предполагают, что:
Automapper - Mapper уже инициализировал ошибку
В Test Explorer в VS, когда я выбираю один класс тестирования и выбираю «Выполнить выбранные тесты», они все проходят. Однако при выборе основного «Выполнить все» некоторые тесты завершаются с сообщением Mapper уже инициализирован . И каждый раз это разные тесты в разных классах, которые терпят неудачу.
Я предполагаю, что разные потоки создаются для разных методов, но все они пытаются инициализировать один и тот же экземпляр mapper, который выдает ошибку.
Однако я не уверен, где я должен вызывать инициализацию в одном (и только одном) месте и использовать эту же инициализацию для всех моих тестовых классов (как я делаю в Startup.cs Configure метод).
Заранее спасибо.