Moq возвращает ноль результатов - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь использовать Moq для тестирования кода EntityFramework, и иногда он возвращает нулевые результаты после установки.

Попытка создать конструктор без параметров для workingController - возвращаются те же нулевые элементы

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 () должен вернуть мне тех трех парней, которых я добавил туда как iQueryables

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Почему-то добавив параметр при запуске и используя его вместо New WorkerQueryParams (), добились цели.Я до сих пор не знаю, почему, но он прекрасно работает и возвращает 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);
0 голосов
/ 25 декабря 2018

Ваш метод установки совпадает с фактической ссылкой объекта WorkerQueryParameters, вам нужно будет использовать ту же ссылку объекта или вам нужно будет сопоставить данное значение с It.Is<WorkerQueryParameters>(x => x.Value == true) или просто сопоставить любую It.Any<WorkerQueryParameters>(), например:

    _repo.Setup(x => x.GetAll(It.Any<WorkerQueryParameters>())).Returns(workersq);

Может также стоить установить ваш макет на strick, чтобы он бросал вместо того, чтобы просто возвращать ноль или значение по умолчанию.

    _repo = new Mock<IWorkerReprisatory>(MockBehavior.Strict);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...