最小起订量返回零结果
Moq returning zero results
我正在尝试使用 Moq 来测试 EntityFramework 代码,不知何故 return 设置后结果为零。
尝试在 workersController 上创建无参数构造函数 - 相同的零项 returned
public class WorkerDbTest
{
private readonly Mock<IWorkerReprisatory> _repo;
private readonly WorkersController _controller;
private readonly List<Worker> workers;
public WorkerDbTest()
{
_logger = new Mock<ILogger<WorkersController>>();
workers = new List<Worker>
{
new Worker() {
Id = 0,
FirstName = "John",
MiddleName = "Abraham",
LastName = "Doe",
Workplace = "Bomj",
BirthDate = new DateTime(1700,10,10),
Employed = new DateTime(1800,10,10)},
new Worker() {
Id = 1,
FirstName = "Alaster",
MiddleName = "Crowly",
LastName = "Johns",
Workplace = "VipBomj",
BirthDate = new DateTime(1800,12,12),
Employed = new DateTime(1900,12,12)},
new Worker() {
Id = 2,
FirstName = "Jane",
MiddleName = "Susan",
LastName = "Black",
Workplace = "FemenistBobj",
BirthDate = new DateTime(2000,11,11),
Employed = new DateTime(2010,11,11)}
};
IQueryable<Worker> workersq = workers.AsQueryable();
_repo = new Mock<IWorkerReprisatory>();
_repo.Setup(x => x.GetAll(new WorkerQueryParameters())).Returns(workersq);
}
[Fact]
public void GetOkResult()
{
var tst = _repo.Object.GetAll(new WorkerQueryParameters());
}
}
//Controller class GetAllWorkers
public IActionResult GetAllWorkers(WorkerQueryParameters workerQueryParameters)
{
//_logger.LogInformation("GetAllCustomersStarted");
var allWorkers = _workerRepository.GetAll(workerQueryParameters).ToList();
var allWorkersDTO = allWorkers.Select(x => Mapper.Map<WorkerDTO>(x));
if(Response != null)
{
Response.Headers.Add("X-Pagination",
JsonConvert.SerializeObject(new { totalCount = _workerRepository.Count() }));
}
return Ok(allWorkersDTO);
}
当前allWorkers对象在调用后产生0个条目。
所以我想测试一下 Mock 对象是否有任何结果然后得到 var tst 并且仍然没有条目(
假设 GetAll() 应该 return 我添加的那三个人作为 iQueryables
您的设置方法匹配 WorkerQueryParameters
的实际对象引用,您需要使用相同的对象引用,或者您需要将给定值与 It.Is<WorkerQueryParameters>(x => x.Value == true)
匹配或者只匹配任何 It.Any<WorkerQueryParameters>()
,例如:
_repo.Setup(x => x.GetAll(It.Any<WorkerQueryParameters>())).Returns(workersq);
可能还值得将您的 mock 设置为 strick,以便它抛出而不是仅仅返回 null 或默认值。
_repo = new Mock<IWorkerReprisatory>(MockBehavior.Strict);
为什么在启动时添加一个参数并使用它而不是 New WorkerQueryParams() 来达到目的。我仍然不知道为什么,但它工作得很好,并且 returns 3 个条目。
感谢所有参与的人和@Nikosi 的想法)
_params= new WorkerQueryParameters()
_repo.Setup(x => x.GetAll(_params)).Returns(workersq);
IQueryable<Worker> tst = _repo.Object.GetAll(_params);
var OkResponse = _controller.GetAllWorkers(_params);
我正在尝试使用 Moq 来测试 EntityFramework 代码,不知何故 return 设置后结果为零。
尝试在 workersController 上创建无参数构造函数 - 相同的零项 returned
public class WorkerDbTest
{
private readonly Mock<IWorkerReprisatory> _repo;
private readonly WorkersController _controller;
private readonly List<Worker> workers;
public WorkerDbTest()
{
_logger = new Mock<ILogger<WorkersController>>();
workers = new List<Worker>
{
new Worker() {
Id = 0,
FirstName = "John",
MiddleName = "Abraham",
LastName = "Doe",
Workplace = "Bomj",
BirthDate = new DateTime(1700,10,10),
Employed = new DateTime(1800,10,10)},
new Worker() {
Id = 1,
FirstName = "Alaster",
MiddleName = "Crowly",
LastName = "Johns",
Workplace = "VipBomj",
BirthDate = new DateTime(1800,12,12),
Employed = new DateTime(1900,12,12)},
new Worker() {
Id = 2,
FirstName = "Jane",
MiddleName = "Susan",
LastName = "Black",
Workplace = "FemenistBobj",
BirthDate = new DateTime(2000,11,11),
Employed = new DateTime(2010,11,11)}
};
IQueryable<Worker> workersq = workers.AsQueryable();
_repo = new Mock<IWorkerReprisatory>();
_repo.Setup(x => x.GetAll(new WorkerQueryParameters())).Returns(workersq);
}
[Fact]
public void GetOkResult()
{
var tst = _repo.Object.GetAll(new WorkerQueryParameters());
}
}
//Controller class GetAllWorkers
public IActionResult GetAllWorkers(WorkerQueryParameters workerQueryParameters)
{
//_logger.LogInformation("GetAllCustomersStarted");
var allWorkers = _workerRepository.GetAll(workerQueryParameters).ToList();
var allWorkersDTO = allWorkers.Select(x => Mapper.Map<WorkerDTO>(x));
if(Response != null)
{
Response.Headers.Add("X-Pagination",
JsonConvert.SerializeObject(new { totalCount = _workerRepository.Count() }));
}
return Ok(allWorkersDTO);
}
当前allWorkers对象在调用后产生0个条目。 所以我想测试一下 Mock 对象是否有任何结果然后得到 var tst 并且仍然没有条目(
假设 GetAll() 应该 return 我添加的那三个人作为 iQueryables
您的设置方法匹配 WorkerQueryParameters
的实际对象引用,您需要使用相同的对象引用,或者您需要将给定值与 It.Is<WorkerQueryParameters>(x => x.Value == true)
匹配或者只匹配任何 It.Any<WorkerQueryParameters>()
,例如:
_repo.Setup(x => x.GetAll(It.Any<WorkerQueryParameters>())).Returns(workersq);
可能还值得将您的 mock 设置为 strick,以便它抛出而不是仅仅返回 null 或默认值。
_repo = new Mock<IWorkerReprisatory>(MockBehavior.Strict);
为什么在启动时添加一个参数并使用它而不是 New WorkerQueryParams() 来达到目的。我仍然不知道为什么,但它工作得很好,并且 returns 3 个条目。 感谢所有参与的人和@Nikosi 的想法)
_params= new WorkerQueryParameters()
_repo.Setup(x => x.GetAll(_params)).Returns(workersq);
IQueryable<Worker> tst = _repo.Object.GetAll(_params);
var OkResponse = _controller.GetAllWorkers(_params);