c# - Moq 与 Autofac Func<Owned<IClass>>

标签 c# moq autofac

我正在尝试切换一些我必须使用自有实例而不是传递容器的代码。

public class SyncManager
{
    private Func<Owned<ISynchProcessor>> _syncProcessor = null;

    public SyncManager(Func<Owned<ISynchProcessor>> syncProcessor)
    {
        _syncProcessor = syncProcessor;
    }

    private void Handle()
    {
        using (var service = _syncProcessor())
        {
            service.Value.Process();   
        }
    }
}

现在我想对 Func 进行 Moq 并注入(inject)它,但是对 _syncProcessor() 的调用没有解决任何问题所以我尝试了这个。

Mock<ITimer> timer = new Mock<ITimer>();
Mock<Func<Owned<ISynchProcessor>>> syncProcessor = new Mock<Func<Owned<ISynchProcessor>>>();
Mock<Owned<ISynchProcessor>> proc = new Mock<Owned<ISynchProcessor>>();

[TestInitialize]
public void TestInitialize()
{
    timer = new Mock<ITimer>();
    syncProcessor = new Mock<Func<Owned<ISynchProcessor>>>();
    syncProcessor.Setup(item => item.Invoke()).Returns(() => proc.Object);
}

但这给了我一个运行时错误,它不能将类型为 System.Linq.Expressions.InstanceMethodCallExpressionN 的对象转换为类型 System.Linq.InvocationExpression

最佳答案

好的,我想我对此感到有点 Mock 高兴。没有理由 mock Func。这样做似乎让我回到了正轨。

    Func<Owned<ISynchProcessor>> syncProcessor;
    Mock<ISynchProcessor> proc = new Mock<ISynchProcessor>();

    [TestInitialize]
    public void TestInitialize()
    {        
        syncProcessor = () => new Owned<ISynchProcessor>(proc.Object, new Mock<IDisposable>().Object);         
    }

现在我可以将具体的 Func 传递到我的类中,让它返回我真正想要模拟的类,我的处理器,并验证它的调用是否正在完成和处理。

关于c# - Moq 与 Autofac Func<Owned<IClass>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861544/

相关文章:

c# - 最小起订量和构造函数 - 测试初始化​​行为

c# - 如何使用Autofac在非引用项目中注册组件

c# - Bot Framework Autofac DI - 使用 context.Call() 时传递依赖项

c# - 在单独的线程中使用实例时使用什么生命周期范围?

c# - 用于分发的 Monotouch 条件编译

c# - 由于格式不正确,加载程序集失败

c# - 这可以用最小起订量来模拟吗?

c# - 将 Windows 应用商店应用程序连接到本地主机

c# - 从 ALT+TAB 菜单隐藏无边框窗口

c# - C# 中的最小起订量事务范围