我试图在类构造函数中模拟我的服务的create方法:
serviceMock.Setup(p => p.AddClinic(GetTestClinicModel()))
.Returns(GetTestClinic());
模拟模型和模拟实体
private CreateClinicBindingModel GetTestClinicModel()
{
return new CreateClinicBindingModel()
{
Name = "Clinic-3"
};
}
private Clinic GetTestClinic()
{
return new Clinic()
{
Id = 3,
Name = "Clinic-3"
};
}
测试方法
[Fact]
public void Add_ValidObjectPassed_ReturnsCreatedResponse()
{
// Act
var createdResponse = controller.Add(GetTestClinicModel());
// Assert
Assert.IsType<CreatedAtActionResult>(createdResponse);
}
控制器添加方法
[HttpPost("create")]
public IActionResult Add(CreateClinicBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
var entity = _service.AddClinic(model);
return Created(entity);
}
所以我的问题是测试失败,当我调试_service.AddClinic()
方法时,它返回null。
模拟服务不返回预期的实体(诊所)。
我该如何解决?
问题是安装程序期望GetTestClinicModel()
调用时创建的特定实例。
但是,在执行测试时不会使用同一实例,因为GetTestClinicModel()
再次调用时会创建一个全新的实例。
因此,由于存在单独的实例,该模拟将返回null。
考虑更改设置以使用类似参数的匹配器 It.Is<T>()
serviceMock
.Setup(_ => _.AddClinic(It.Is<CreateClinicBindingModel>(m => m.Name == "Clinic-3")))
.Returns(GetTestClinic());
上面的设置告诉模拟在获得与提供的谓词匹配的实例时其行为符合预期
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句