using FakeItEasy; using Quartz; using Quartz.Spi; using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Threading.Tasks; using Xunit; namespace QuartzHostedService.Test { public class QuartzHostedServiceUnitTest { [Fact(DisplayName = "Устанавливаем JobFactory (Для DI)")] public async void IServiceCollectionExtensions_Register_HostedService() { IServiceProvider serviceProvider = A.Fake(); A.CallTo(() => serviceProvider.GetService(typeof(IEnumerable))).Returns(null); ISchedulerFactory schedulerFactory = A.Fake(); IScheduler scheduler = A.Fake(); A.CallTo(() => schedulerFactory.GetScheduler(A.Ignored)) .Returns(Task.FromResult(scheduler)); IJobFactory jobFactory = A.Fake(); var testClass = new QuartzHostedService(serviceProvider, schedulerFactory, jobFactory); await testClass.StartAsync(CancellationToken.None); A.CallTo(scheduler) .Where(a => a.Method.Name.Equals("set_JobFactory")); } [Fact(DisplayName = "Запустили все зарегистрированые Job")] public async void IServiceCollectionExtensions_Register_RegisterJob() { // Зарегистрированные джобы var scheduleJobc = new List(); var jobDetail1 = A.Fake(); var jobDetail2 = A.Fake(); var jobDetail3 = A.Fake(); scheduleJobc.Add(new ScheduleJob(jobDetail1, new List() { A.Fake() })); scheduleJobc.Add(new ScheduleJob(jobDetail2, new List() { A.Fake() })); scheduleJobc.Add(new ScheduleJob(jobDetail3, new List() { A.Fake() })); IServiceProvider serviceProvider = A.Fake(); A.CallTo(() => serviceProvider.GetService(typeof(IEnumerable))).Returns(scheduleJobc); ISchedulerFactory schedulerFactory = A.Fake(); IScheduler scheduler = A.Fake(); A.CallTo(() => schedulerFactory.GetScheduler(A.Ignored)) .Returns(Task.FromResult(scheduler)); IJobFactory jobFactory = A.Fake(); var testClass = new QuartzHostedService(serviceProvider, schedulerFactory, jobFactory); await testClass.StartAsync(CancellationToken.None); A.CallTo( () => scheduler.ScheduleJob( A.That.Matches(jd => jd == jobDetail1 || jd == jobDetail2 || jd == jobDetail3), A.Ignored, A.Ignored)) .MustHaveHappened(Repeated.Like(count => count == 3)); } [Fact(DisplayName = "Запустили все зарегистрированые Job с указанными ITrigger")] public async void IServiceCollectionExtensions_Register_RegisterJob_ITrigger() { // Зарегистрированные джобы var scheduleJobc = new List(); var jobDetail1 = A.Fake(); var trigger1 = A.Fake(); var trigger2 = A.Fake(); var trigger3 = A.Fake(); scheduleJobc.Add(new ScheduleJob(jobDetail1, new List() { trigger1, trigger2, trigger3 })); IServiceProvider serviceProvider = A.Fake(); A.CallTo(() => serviceProvider.GetService(typeof(IEnumerable))).Returns(scheduleJobc); ISchedulerFactory schedulerFactory = A.Fake(); IScheduler scheduler = A.Fake(); A.CallTo(() => schedulerFactory.GetScheduler(A.Ignored)) .Returns(Task.FromResult(scheduler)); IJobFactory jobFactory = A.Fake(); var testClass = new QuartzHostedService(serviceProvider, schedulerFactory, jobFactory); await testClass.StartAsync(CancellationToken.None); A.CallTo( () => scheduler.ScheduleJob( A.That.Matches(jd => jd == jobDetail1), A.That.Matches(t => t == trigger1), A.Ignored)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo( () => scheduler.ScheduleJob( A.That.Matches(t => t == trigger2 || t == trigger3), A.Ignored)) .MustHaveHappened(Repeated.Exactly.Twice); } } }