我正在尝试切换一些我必须使用自有实例而不是传递容器的代码。
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
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/