我的webapi項目中有一個控制器方法,它調用服務方法並將服務方法的響應轉換爲Dto對象以發送響應。 控制器看起來是這樣的:Webapi控制器單元測試中的自動映射器
[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));
}
和模擬測試是這樣的:
//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);
我使用automapper與DTO的對象映射。當我調試此測試時,結果爲空。傳入的dto映射工作正常。我懷疑服務方法設置存在一些問題。 Anyhelp表示感謝。
一個快速的 - 不要嘲笑AutoMapper。真的,這沒有意義。這就像嘲笑JSON.Net或StringBuilder。只要使用真實的東西。 –