[英]Moq setup returns null object when the method is called by a UnitTest
测试设置
当测试命中 controller 里面的方法时,Mock 给出 null object
我的控制器的构造函数有两个我模拟的依赖项。 在为 CheckOut 运行测试时,它在结果中给出 null object。 我在 Model 对象和业务之间使用 AutoMapper 到 map
[Fact]
public void CheckOutSomethingsTest()
{
Mock<ICheckoutService> checkoutServiceMock = new Mock<ICheckoutService>();
Mock<IMapper> mapperMock = new Mock<IMapper>();
checkoutServiceMock.Setup(c => c.CheckoutSomethings(new CheckOutSomethingsInput
{
SecretKey = "SecureKey",
UserId = 100,
SomethingIds = new List<int> { 10001, 1002, 1003 }
}))
.Returns<List<CheckedOutSomething>>((o) => new List<CheckedOutSomething>
{
new CheckedOutSomething { Id = 10001, Remarks = "Success" },
new CheckedOutSomething { Id = 10002, Remarks = "Success" }
});
var configuration = new MapperConfiguration(cfg =>
{
cfg.AddSomething(new AutoMapperBusinessToEntitiesSomething());
cfg.AddSomething(new AutoMapperModelsToBusinessSomething());
});
var mapper = new Mapper(configuration);
var controller = new SomethingsController(checkoutServiceMock.Object, mapper);
var result = controller.CheckOut(
new CheckOutSomethingInputModel
{
UserId = 100,
SomethingIds = new List<int> { 10001, 10002, 10003 }
});
Assert.IsType<OkObjectResult>(result.Result);
Assert.Equal(2, result.Value.Count);
}
服务构造器
public ProfilesController(ICheckoutService checkoutService, IMapper mapper)
{
this.checkoutService = checkoutService;
this.mapper = mapper;
}
方法
[HttpPost]
[Route("checkout")]
public ActionResult<List<CheckedOutSomethingModel>>
CheckOut([FromBody] CheckOutSomethingInputModel checkoutInput)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var input = mapper.Map<CheckOutSomethingsInput>(checkoutInput);
var output = mapper.Map<List<CheckedOutSomethingModel>>
(checkoutService.CheckoutSomethings(input));
return Ok(output);
}
我无法弄清楚我做错了什么
@Fabio 非常感谢是这样的吗
checkoutServiceMock.Setup(c => c.CheckoutSomethings(It.IsAny<CheckOutSomethingsInput>()))
.Returns(new List<CheckedOutSomething>
{
new CheckedOutSomething { Id = 10001, Remarks = "Success" },
new CheckedOutSomething { Id = 10002, Remarks = "Success" }
});
我确实做到了,而且成功了,再次感谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.