JobStorage.Current属性值尚未初始化

时间:2019-05-12 21:39:14

标签: asp.net-web-api2 hangfire nunit-3.0

别误会我的意思!之前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之前进行设置。

请帮助我解决这里的问题以及如何解决此问题。

谢谢!

0 个答案:

没有答案