【发布时间】:2010-05-01 13:53:11
【问题描述】:
我正在尝试模拟 Autofac 解析,例如
using System;
using Autofac;
using TypeMock.ArrangeActAssert;
class Program
{
static void Main(string[] args)
{
var inst = Isolate.Fake.Instance<IContainer>();
Isolate.Fake.StaticMethods(typeof(ResolutionExtensions), Members.ReturnNulls);
Isolate.WhenCalled(() => inst.Resolve<IRubber>()).WillReturn(new BubbleGum());
Console.Out.WriteLine(inst.Resolve<IRubber>());
}
}
public interface IRubber
{}
public class BubbleGum : IRubber
{}
来自 Moq,TypeMock 的语法和异常让我很困惑。最初在 TestMethod 中运行它后,我不断收到类似于“WhenCalled 不能在没有补充行为的情况下运行”的异常。我尝试为每个人和他们的母亲定义行为,但无济于事。
然后我调试单步执行测试运行,发现 Autofac 触发了一个实际异常:IRubber 尚未注册。
所以很明显,静态 Resolve 函数没有被伪造,而且我无法让它被伪造,无论我如何连接它。
Isolate.WhenCalled(() => ResolutionExtensions.Resolve<IRubber>(null)).WillReturn(new BubbleGum());
... 从 Autofac 引发异常,抱怨 IComponentContext 不能为空。向它提供可能是伪造的 IContainer(或伪造 IComponentContext)让我回到“IRubber 未注册”错误。
【问题讨论】:
标签: c# visual-studio-2010 mocking autofac typemock