我有一个方法使用
HostingEnvironment.QueueBackgroundWorkItem
我希望在此调用之前对某些行为进行单元测试,但是,测试因 System.InvalidOperationException 失败:由于对象的当前状态,操作无效。
我怀疑我需要模拟 HostingEnvironment 但不知道如何操作。
最佳答案
为了解决这个问题,我定义了一个接口(interface)
public interface ITaskScheduler
{
void QueueBackgroundWorkItem(Action<CancellationToken> workItem);
}
在生产代码中我注入(inject)实现
public class AspNetTaskScheduler : ITaskScheduler
{
public void QueueBackgroundWorkItem(Action<CancellationToken> workItem)
{
HostingEnvironment.QueueBackgroundWorkItem(workItem);
}
}
在测试代码中我注入(inject)实现
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/