Использование Moq для проверки вызова в другом классе - PullRequest
0 голосов
/ 06 февраля 2019

Проблема

У меня есть следующий метод:

public void ParseRebootData(RebootDeviceDto rebootDeviceDto)
{
    if (rebootDeviceDto.RebootAtUtc.CompareTo(DateTime.UtcNow) <= 0) // if time is either now or in the past, reboot instantly
    {
        Console.WriteLine("Rebooting machine now");
        await new Tasks.Reboot().RebootNow(); // <-- I want to test this line

    }
    else // schedule the reboot
    {
        Console.WriteLine($"Scheduling reboot at {rebootDeviceDto.RebootAtUtc}");
        _backgroundJobClient.Schedule<Tasks.Reboot>(x => x.RebootNow(), rebootDeviceDto.RebootAtUtc);
    }
}

_backgroundJobClient передается путем внедрения зависимостей в конструктор.

Я хочу проверитьline await new Tasks.Reboot().RebootNow(); если он вызывается, используя метод Verify Moq.

Мой вопрос

Поскольку Tasks.Reboot - это просто класс, который не передается через внедрение зависимостей, я нене знаю, смогу ли я проверить этот вызов.

Одним из решений может быть создание TasksService, которое я могу переопределить в своих модульных тестах (что может быть неплохой идеей), но я хочу знать, еслиэто возможно вообще, как есть.

1 Ответ

0 голосов
/ 06 февраля 2019

С Moq вы можете создавать только фиктивные объекты снаружи.Вы не можете заменить статический экземпляр другим.

Существуют и другие среды тестирования, которые могут сделать это, например, прокладки Microsoft Fakes .С другой стороны, прокладки должны использоваться со сторонним кодом.Если вы можете изменить код и добавить TasksService, это предпочтительный метод для отделения кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...