Мое приложение использует 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());
}
...
Заранее спасибо