XUnit 创建操作服务模拟失败
XUnit Create Operation Service Mock Failure
我正在尝试在 class 构造函数中像这样模拟我服务的创建方法:
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()
方法时它 return 为空。
模拟服务不是 return 预期的实体(诊所)。
我该如何解决这个问题?
问题是安装程序需要调用 GetTestClinicModel()
时创建的特定实例。
但是,当再次调用 GetTestClinicModel()
时,会创建一个全新的实例,因此在执行测试时不会使用同一个实例。
因此模拟将 return 为 null,因为有单独的实例。
考虑更改设置以使用像 It.Is<T>()
这样的参数匹配器
serviceMock
.Setup(_ => _.AddClinic(It.Is<CreateClinicBindingModel>(m => m.Name == "Clinic-3")))
.Returns(GetTestClinic());
以上设置告诉 mock 在获得与提供的谓词匹配的实例时按预期行为
我正在尝试在 class 构造函数中像这样模拟我服务的创建方法:
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()
方法时它 return 为空。
模拟服务不是 return 预期的实体(诊所)。
我该如何解决这个问题?
问题是安装程序需要调用 GetTestClinicModel()
时创建的特定实例。
但是,当再次调用 GetTestClinicModel()
时,会创建一个全新的实例,因此在执行测试时不会使用同一个实例。
因此模拟将 return 为 null,因为有单独的实例。
考虑更改设置以使用像 It.Is<T>()
serviceMock
.Setup(_ => _.AddClinic(It.Is<CreateClinicBindingModel>(m => m.Name == "Clinic-3")))
.Returns(GetTestClinic());
以上设置告诉 mock 在获得与提供的谓词匹配的实例时按预期行为