我正在开发一个项目并为 HttpHandler 编写单元测试。 运行测试这一行
BackgroundJob.Schedule(() => PokeRequestedChat(c.Id, 1), TimeSpan.FromSeconds(60));
给出异常 ex=> {“JobStorage.Current 属性值尚未初始化。您必须在使用 Hangfire 客户端或服务器 API 之前设置它。”} 否则项目在服务器上运行良好。此异常仅在运行 xUnit 测试时发生。
我是c#新手,对hangfire一无所知
你不能编写单元测试BackgroundJob.Schedule方法,因为你需要Hangfire的主机,并且hangfire需要在你的应用程序中注册,你可以尝试为Hangfire编写集成测试。或者只是测试你的PokeRequestedChat方法,或者编写一些包装器BackgroundJob.Schedule 并模拟它。
通过在测试类中添加此行解决了问题
JobStorage.Current = new SqlServerStorage("connectionString");
您可以通过这行代码解决错误(它为
JobStorage.Current
创建了一个模拟对象):
JobStorage.Current = Substitute.For<SqlServerStorage>(@"Server=.\sqlexpress;Database=test;Trusted_Connection=True;");
我在此示例中使用了
NSubstitute
,但您可以使用 Moq
或其他库。
老问题,但也许有人仍然需要它:
GlobalConfiguration.Configuration.UseActivator(new Hangfire.JobActivator());
GlobalConfiguration.Configuration.UseMemoryStorage();
new BackgroundJobServer(new BackgroundJobServerOptions
{
WorkerCount = 1 // Set the number of worker threads
});
这也设置了一个测试存储。 (您将需要 Hangfire.MemoryStorage 包)