Adho c Ошибка Automapper "Mapper не инициализирован. Вызовите Initialize с соответствующей конфигурацией ..." при запуске нескольких тестов с XUnit - PullRequest
0 голосов
/ 23 января 2020

Мое приложение использует Stati c Automapper (не самый лучший, но я пока не могу его изменить), поэтому я создал ICollectionFixture, чтобы убедиться, что Mapper.Initialize вызывается только один раз, прежде чем все тесты в нескольких классах будут запустить. В соответствии с внутренней переменной GUID кажется, что прибор вызывается только один раз и перед всеми тестами. Однако, когда я запускаю несколько тестов, некоторые из них терпят неудачу с сообщением

System.InvalidOperationException: Mapper не инициализирован. Вызовите Initialize с соответствующей конфигурацией. Если вы пытаетесь использовать экземпляры mapper через контейнер или иным образом, убедитесь, что у вас нет вызовов методов stati c Mapper.Map, и если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что вы передаете соответствующий экземпляр IConfigurationProvider.

Если я запускаю тест снова, независимо от того, пройден ли он, проблема возникает только при одновременном запуске нескольких тестов.

Ниже приведены некоторые выдержки из код, который я описал:

Устройство Mapper

public class MapperFixture : IDisposable
    {

        public readonly Guid id;

        public MapperFixture()
        {
            id =  Guid.NewGuid(); 
            Mapper.Initialize(config => {
                config.AddCollectionMappers();
                //some mappings
            });

        }
...

Коллекция Mapper

[CollectionDefinition("Mapper Collection")]
    public class MapperCollectionFixture: ICollectionFixture<MapperFixture>
    {
    }

Тест class1

 [Collection("Mapper Collection")]
    public class Class1Test

    {
        private Mock<ILogger<Class1>>  mockLogger;

        private readonly ITestOutputHelper _output;
        private readonly MapperFixture _mapperFixture;


        public Class1Test(ITestOutputHelper outputHelper, MapperFixture fixture)
        {
            this.mockLogger = new Mock<ILogger<Class1>>();
            _output = outputHelper;
            _mapperFixture = fixture;

            _output.WriteLine(_mapperFixture.id.ToString());

        }
...

Тестовый класс2

 [Collection("Mapper Collection")]
    public class Class2Test
    {
        private Mock<ILogger<Class2>> logger;

        private readonly ITestOutputHelper _output;
        private readonly MapperFixture _mapperFixture;

        public CLass2Test(ITestOutputHelper outputHelper, MapperFixture fixture)
        {
            this.logger = new Mock<ILogger<Class2>>();
            _output = outputHelper;
            _mapperFixture = fixture;

            _output.WriteLine(_mapperFixture.id.ToString());

        }
...

Заранее спасибо

...