webapiプロジェクトには、サービスメソッドを呼び出すコントローラメソッドがあり、サービスメソッドのレスポンスをDtoオブジェクトに変換してレスポンスを送信します。WebapiコントローラのAutomapperユニットテスト
[HttpPost]
[Route(WebApiConfig.RootApiUri + "/v1/examplepost")]
public async Task<List<Html1Dto>> examplepost([FromBody] SomeInfoDto someInfoDto)
{
var someInfo = _mapper.Map<SomeInfoDto, SomeInfo>(someInfoDto);
return this._mapper.Map<List<Html1>, List<Html1Dto>>(await this._someService.SomeCall(someInfo));
}
と、このような模擬テスト:私はのDTOを持つオブジェクトをマッピングするためにautomapperを使用しています
//Arrange
var mockMapper = new Mock<IMapper>();
var mockSomeService = new Mock<ISomeService<Html1>>();
mockSomeService.Setup(s => s.SomeCall(It.IsAny<SomeInfo>())).ReturnsAsync(
new List<Html1>() {new Html1() {....}});
SomeInfoDto mockSomeInfoDto = new SomeInfoDto()
{
..
};
SomeInfo mockSomeInfo = new SomeInfo();
mockMapper.Setup(m => m.Map<SomeInfoDto, SomeInfo>(mockSomeInfoDto))
.Returns(mockSomeInfo);
mockMapper.Setup(m => m.Map<List<Html1>, List<Html1Dto>>(It.IsAny<List<Html1>>())).Returns(It.IsAny<List<Html1Dto>>);
var someController = GetController(mockMapper.Object, mockSomeService.Object);
//Act
var result = await someController.examplePost(mockSomeInfoDto);
コントローラは次のようになります。このテストをデバッグすると、結果はnullになります。着信dtoのマッピングはうまく動作します。私は、サービスメソッドの設定に問題があると思われます。 Anyhelpは高く評価されています。
1つの素早いもの - モックAutoMapperをしないでください。本当に、それは無意味です。それはJSON.NetやStringBuilderを嘲笑するようなものです。本当のことだけを使ってください。 –