Moq与Autofac Func <拥有<iclass>&gt; </拥有<iclass>

时间:2013-12-31 18:07:43

标签: 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();   
        }
    }
}

现在我想要Moq the Func&lt;资&GT;并注入它但是对_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

1 个答案:

答案 0 :(得分:12)

好的,我觉得我对此有点满意。没有理由嘲笑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传递给我的类,让它返回我真正想要Mock,我的处理器的类,并验证它的调用正在完成和处理。