Я использую Hangfire для планирования некоторых работ. У всех моих заданий есть дата расписания, поэтому я использую метод статического расширения Schedule
public static string Schedule([NotNull] this IBackgroundJobClient client, [InstantHandle][NotNull] Expression<Action> methodCall, DateTimeOffset enqueueAt);
Я хочу провести модульное тестирование своих методов, чтобы проверить, действительно ли запущен Hangfire.
Для этого я следовал документации Hangfire по модульному тестированию (https://docs.hangfire.io/en/latest/background-methods/writing-unit-tests.html), в которой предлагается издеваться IBackgroundJobClient
и проверять единственный открытый метод Create, который у него есть:
string Create([NotNull] Job job, [NotNull] IState state);
Но я вижу, что для вызовов по расписанию это не вызывается, вместо этого вызывается другая, не общедоступная перегрузка, поэтому я получаю следующую ошибку:
Message: Moq.MockException :
Expected invocation on the mock at least once, but was never performed: x => x.Create(It.IsAny<job>(), It.IsAny<enqueuedstate>())
No setups configured.
Performed invocations:
IBackgroundJobClient.Create(JobService.TaskFunction, ScheduledState)
Тем не менее, я предпринял попытку с помощью метода Enqueue
, и это похоже на работу с макетом. Но мне нужно использовать Schedule
.
Другим вариантом будет утверждение о перегрузке, которую он на самом деле вызывает
public static string Create([NotNull] this IBackgroundJobClient client, [InstantHandle][NotNull] Expression<Action> methodCall, [NotNull] IState state);
Но так как это метод расширения, это недопустимый подход для Moq.
Message: System.NotSupportedException : Invalid verify on an extension method: x => x.Create(It.IsAny<Expression<Action>>(), It.IsAny<EnqueuedState>())
Так как я могу провести модульное тестирование Hangfire для метода Schedule
?