我正在测试该方法,最终可以映射到我的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.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);
}
}
答案 0 :(得分:0)
我的解决方案,配置AutoMapperConfig
public class AutoMapperConfig
{
public static object thisLock = new object();
public static void Initialize()
{
lock (thisLock)
{
AutoMapper.Mapper.Reset();
AutoMapper.Mapper.Initialize(cfg => { });
}
}
}
}