Hangfire在集成测试中访问已处置的LogFactory

问题描述

我有一项服务,按预期工作。但是我还创建了一个集成测试来测试服务,但是不幸的是,这导致了一些问题。

我创建了一个非常简单的WebApplicationFactory,以将我的服务设置为使用内存SQL Server数据库而不是真实的数据库。添加dbContext并将其设置为内存数据库时,它在Hangfire上失败。在测试中,当用Enqueue调用Hangfire时,它给出了有关LogFactory已被处置的异常。仅当我在不同的测试类中运行多个测试时,才会发生这种情况。我还使用XUnit和IClassFixture在每个新的测试类中创建WebApplicationFactory的新实例。当我删除启用内存数据库的行时,一切正常,但它将使用appsettings.json中设置的Azure数据库。

我收到的错误消息是 function handleChange(event) { const {name,value} = event.target; const newObject = { ...object,[name]: value } setObject(newObject) console.log('newObject',newObject) console.log('currentObject',object) };

Cannot access a disposed object. Object name: 'LoggerFactory'.

在原始启动Serilog中添加了

我的自定义WebApplicationFactory:

at Microsoft.Extensions.Logging.LoggerFactory.CreateLogger(String categoryName)
at Hangfire.AspNetCore.AspNetCoreLogProvider.GetLogger(String name)
at Hangfire.Logging.LogProvider.GetLogger(String name)
at Hangfire.Logging.LogProvider.GetLogger(Type type)
at Hangfire.Client.CoreBackgroundJobFactory..ctor(IStateMachine stateMachine)
at Hangfire.Client.BackgroundJobFactory..ctor(IJobFilterProvider filterProvider)
at Hangfire.BackgroundJobClient..ctor(JobStorage storage,IJobFilterProvider filterProvider)
at Hangfire.BackgroundJobClient..ctor(JobStorage storage)
at Hangfire.BackgroundJobClient..ctor()
at Hangfire.BackgroundJob.<>c.<.cctor>b__45_0()
at System.Lazy`1.PublicationOnlyViaFactory(LazyHelper initializer)
at System.Lazy`1.CreateValue()
at System.Lazy`1.get_Value()
at Hangfire.BackgroundJob.<>c.<.cctor>b__45_1()
at Hangfire.BackgroundJob.Enqueue(Expression`1 methodCall)
at Api.Controllers.ProductController.<Import>d__10.MoveNext() in 
C:\Code\API\Controllers\ProductController.cs:line 133

我尝试过:

    在测试代​​码中
  • services.AddHangfire(configuration => configuration.UseMemoryStorage()),以使用内存中的存储而不是数据库。
  • Expliciteley还添加了HangFire应该使用SeriLogProvider的配置。
  • 简化serilog配置,使其仅使用控制台写入。

有人可以通过编写集成测试和与HangFire结合使用的内存数据库来解决这个非常烦人的问题吗?就像我说的那样,当删除内存数据库配置时,一切都会按预期进行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)