我有一种使用方法
我希望在调用之前对HostingEnvironment.QueueBackgroundWorkItem
进行一些行为的单元测试,但是System.InvalidOperationException : Operation is not valid due to the current state of the object.
测试失败
我怀疑这需要模拟HostingEnvironment,但不知道如何操作。
最佳答案
为了解决这个问题,我定义了一个接口
public interface ITaskScheduler
{
void QueueBackgroundWorkItem(Action<CancellationToken> workItem);
}
在生产代码中,我注入了实现
public class AspNetTaskScheduler : ITaskScheduler
{
public void QueueBackgroundWorkItem(Action<CancellationToken> workItem)
{
HostingEnvironment.QueueBackgroundWorkItem(workItem);
}
}
在测试代码中,我注入了实现
public class TaskScheduler : ITaskScheduler
{
public void QueueBackgroundWorkItem(Action<CancellationToken> workItem)
{
workItem.Invoke(new CancellationToken());
}
}
我认为这是一个不错的解决方案,因为单元测试可以正常工作,而排队后台任务的类与
HostingEnvironment
分离。关于moq - 在xunit测试中模拟HostingEnvironment.QueueBackgroundWorkItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28456590/