QueueBackgroundWorkItem

QueueBackgroundWorkItem

我有一种使用方法
我希望在调用之前对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/

10-12 23:38