我正在尝试模拟 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 未注册”错误。