x单元测试 asp 网络核心映射器未初始化



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

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

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

消息:系统无效操作异常:映射器未初始化。 调用 使用适当的配置初始化。如果您正在尝试 通过容器或其他方式使用映射器实例,请确保 不要调用静态 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);
}
}

我的解决方案,配置自动映射器配置

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

最新更新