【发布时间】:2019-10-20 12:37:45
【问题描述】:
我正在测试这个方法,它最终会映射到我的 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);
}
}
【问题讨论】:
-
当你说当我挤压每个人时它会说话你的意思是“当我运行所有测试时这个会抛出一个错误”?
标签: c# unit-testing testing xunit