【发布时间】:2016-05-31 11:50:38
【问题描述】:
我的 webapi 项目中有一个控制器方法,它调用服务方法并将服务方法的响应转换为 Dto 对象以发送响应。 控制器看起来像这样:
[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 将对象与 Dtos 进行映射。当我调试这个测试时,结果为空。传入 dto 的映射工作正常。我怀疑服务方法设置存在一些问题。任何帮助表示赞赏。
【问题讨论】:
-
一件快速的事情 - 不要模拟 AutoMapper。真的,毫无意义。这就像嘲笑 JSON.Net 或 StringBuilder。就用真品吧。
标签: c# asp.net-web-api mocking asp.net-web-api2 automapper