当单元测试调用该方法时,Moq安装程序将返回空对象

测试设置

  

当测试命中控制器内部的方法时,模拟给出空对象

我的控制器的构造函数有两个我嘲笑的依赖项。在运行CheckOut测试时,结果中将提供空对象。我正在使用AutoMapper在模型对象和业务之间进行映射

[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,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);
}
  

我无法弄清楚我在做什么

uhkul 回答:当单元测试调用该方法时,Moq安装程序将返回空对象

@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" }
            });

我确实做到了,而且有效,再次感谢

本文链接:https://www.f2er.com/3147220.html

大家都在问