BackgroundJob.Schedule 抛出异常

问题描述 投票:0回答:4

我正在开发一个项目并为 HttpHandler 编写单元测试。 运行测试这一行

BackgroundJob.Schedule(() => PokeRequestedChat(c.Id, 1), TimeSpan.FromSeconds(60));

给出异常 ex=> {“JobStorage.Current 属性值尚未初始化。您必须在使用 Hangfire 客户端或服务器 API 之前设置它。”} 否则项目在服务器上运行良好。此异常仅在运行 xUnit 测试时发生。

我是c#新手,对hangfire一无所知

c# asp.net asp.net-mvc hangfire
4个回答
0
投票

你不能编写单元测试BackgroundJob.Schedule方法,因为你需要Hangfire的主机,并且hangfire需要在你的应用程序中注册,你可以尝试为Hangfire编写集成测试。或者只是测试你的PokeRequestedChat方法,或者编写一些包装器BackgroundJob.Schedule 并模拟它。


0
投票

通过在测试类中添加此行解决了问题

JobStorage.Current = new SqlServerStorage("connectionString"); 

0
投票

您可以通过这行代码解决错误(它为

JobStorage.Current
创建了一个模拟对象):

JobStorage.Current = Substitute.For<SqlServerStorage>(@"Server=.\sqlexpress;Database=test;Trusted_Connection=True;");

我在此示例中使用了

NSubstitute
,但您可以使用
Moq
或其他库。


0
投票

老问题,但也许有人仍然需要它:

GlobalConfiguration.Configuration.UseActivator(new Hangfire.JobActivator());
GlobalConfiguration.Configuration.UseMemoryStorage();
new BackgroundJobServer(new BackgroundJobServerOptions
{
    WorkerCount = 1 // Set the number of worker threads
});

这也设置了一个测试存储。 (您将需要 Hangfire.MemoryStorage 包)

© www.soinside.com 2019 - 2024. All rights reserved.