C# 获取InMemoryDb数据时,测试环境中的DataService始终返回null
我的问题是:C# 获取InMemoryDb数据时,测试环境中的DataService始终返回null,c#,.net,testing,.net-core,C#,.net,Testing,.net Core,我的问题是: 由于这是一个集成测试,我是否需要首先模拟ICarService?如果需要,我在这里做错了什么?如果您正在测试CarService类如何与数据库交互,那么您不应该模拟它 您要做的是使用真正的CarService实现,并让依赖项注入将InMemoryDatabase作为CarContext参数添加到该类中 因此,删除Mock,并注册真实的代码 为什么返回空值? 在您的示例中,当您调用方法\u carService.GetAsync(id)时,它正在调用mock类。但是您没有在mock上
由于这是一个集成测试,我是否需要首先模拟ICarService?如果需要,我在这里做错了什么?如果您正在测试
CarService
类如何与数据库交互,那么您不应该模拟它
您要做的是使用真正的CarService
实现,并让依赖项注入将InMemoryDatabase作为CarContext
参数添加到该类中
因此,删除Mock
,并注册真实的代码
为什么返回空值?
在您的示例中,当您调用方法\u carService.GetAsync(id)
时,它正在调用mock类。但是您没有在mock上设置任何方法,因此任何调用都将返回null
您需要添加以下内容以使模拟方法返回值:
public class CarController
{
private readonly ICarService _carService;
public CarController(ICarService carService)
{
_carService = carService;
}
[HttpGet]
public async Task<IActionResult> Get([FromRoute] int id)
{
var contact = await _carService.GetAsync(id); **// this is always null**
}
}
\u carService.Setup(cs=>cs.GetAsync(It.IsAny())。返回(1);
但这不会调用内存中的数据库,因为您正在为CarService
使用模拟
public class CarController
{
private readonly ICarService _carService;
public CarController(ICarService carService)
{
_carService = carService;
}
[HttpGet]
public async Task<IActionResult> Get([FromRoute] int id)
{
var contact = await _carService.GetAsync(id); **// this is always null**
}
}
_carService.Setup(cs => cs.GetAsync(It.IsAny<int>()).Returns(1);