moq - xunit 测试中的模拟 HostingEnvironment.QueueBackgroundWorkItem

标签 moq xunit .net-4.5.2

我有一个方法使用 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/

相关文章:

c# - 使用 UnityAutoMoqContainer 注册通用接口(interface)

c# - 模拟具有构造函数依赖性的抽象类(使用 Moq)

c# - 使用多个请求模拟 HttpClient

c++ - 使用 C++ Builder 可以替代 DUnit 吗?

c# - VS2017 .Net Core 2.0 测试 : "Failed to initialize client proxy: could not connect to test process"

c# - FluentAssertions,确保 IEnumerable 仅包含单个元素

c# - .Net 4.5.2 工具安装在哪里?

asp.net-mvc - 如何使用 ASP.NET MVC 的最小起订量模拟 Request.ServerVariables?

c# - 为什么 x86 JIT 比 x64 更聪明?

windows-server-2012-r2 - 您可以在 Windows Server 2016 上安装 .NET 4.5 吗?