I need to unit test my hangifre recurring job with NSubstitute, my service class as follows, now I need to run test for it.
public class ItemService : IItemService, IJobConfigurationService
{
private readonly IItemRepository itemRepository;
private readonly ISettingRepository settingRepository;
private readonly ILogger<ItemService> logger;
public ItemService(IItemRepository itemRepository
,ISettingRepository settingRepository
,ILogger<ItemService> logger)
{
this.itemRepository = itemRepository;
this.settingRepository = settingRepository;
this.logger = logger;
}
public void ConfigureJob(string cronExpression)
{
RecurringJob.AddOrUpdate("PermanentlyDeleteItemsAsync", () =>
PermanentlyDeleteItemsAsync(), cronExpression);
}
public async Task PermanentlyDeleteItemsAsync()
{
//some logic here
}
}
I tried my unit test method something like this,
[Fact]
public async Task ConfigureJob_AddsOrUpdateRecurringJobAsync()
{
// Arrange
var itemRepository = Substitute.For<IItemRepository>();
var settingRepository = Substitute.For<ISettingRepository>();
var logger = Substitute.For<ILogger<ItemService>>();
var mockRecurringJobManager = Substitute.For<IRecurringJobManager>();
var service = new ItemService(itemRepository, settingRepository, logger);
string cronExpression = "0 * * * *"; // Every hour
// Act
service.ConfigureJob(cronExpression);
// Assert
mockRecurringJobManager.Received().AddOrUpdate(Arg.Any<string>(),
() => service.PermanentlyDeleteItemsAsync(), cronExpression);
}
This didn’t work and is this correct way to test it? because I’m new to Hangfire