别误会我的意思!之前here曾问过这个问题,但没有得到任何答案(有效),或者与我的问题也不相似。
我有一个运行.net 4.5并使用Hangfire v1.7.2的ASP.net Web API
在Startup.cs
中,我有:
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
GlobalConfiguration.Configuration.UseSqlServerStorage("myDbConnString");
app.UseHangfireDashboard("/hangfire", new DashboardOptions()
{
Authorization = new[] { new HangfireAuthorizationFilter() }
});
app.UseHangfireServer();
}
在MyController.cs
中,我让Hangfire征用了一个执行DoSomething()的作业
public async Task<IHttpActionResult> PostPerson(Person p)
{
// spin up a new dedicated thread and execut the job
BackgroundJob.Enqueue(() => DoSomething(p.Id));
return OK;
}
如果我使用邮递员工具进行测试,尝试调用我的Web API HTTPPost方法,则会看到我的代码很好地执行了。一切都很好。
但是,当我使用NUnit Test V3
对MyController.cs进行单元测试时,在控制器BackgroundJob.Enqueue(() => DoSomething(p.Id));
中击中此行时遇到了问题
[Test]
public void Post()
{
MyController controller = new MyController();
Person p = new Person
{
data = "hello world"
};
var actionResult = controller.PostPerson(p);
}
堆栈跟踪:
在Hangfire.JobStorage.get_Current()在 Hangfire.BackgroundJob。<> c。<。cctor> b__45_0()在 System.Lazy
1.CreateValue() at System.Lazy
1.LazyInitValue()位于 Hangfire.BackgroundJob.Enqueue(Expression`1 methodCall)在 myApp.Controllers.MyController.d__3.MoveNext()
错误消息:
JobStorage.Current属性值尚未初始化。你必须 在使用Hangfire客户端或服务器API之前进行设置。
请帮助我解决这里的问题以及如何解决此问题。
谢谢!