我将其发布在Typemock论坛上,但太急躁,无法在那里等待回复。这是一个非常n00b的问题。

我正在尝试设置一个假偶像。这是我所拥有的:

var container = Isolate.Fake.Instance<IContainer>(); 
var program = Isolate.Fake.Instance<IProgram>(); 

Isolate.WhenCalled(() => container.Resolve<IProgram>()).WillReturn(program);

(IProgram 是我的代码中的接口)。

当我尝试运行此代码时,我会得到一个AUTOFAC例外:“请求的服务MyApp.IPROGRAM尚未注册。”

不过,这个例外怎么可能会抛出?我实际上不是在调用container.resolve(),对吗?我只是将其设置为返回伪造的图表。

无关的背景信息:我正在试用Typemock,因为AutoFac广泛使用扩展方法,而欧格不会模拟它们。

有帮助吗?

解决方案

几件事可能会有所帮助 - 首先,您可以嘲笑 Resolve() 通过设置呼叫量密码 IComponentContext.Resolve(), ,所有扩展方法委派给。

其次,AUTOFAC的设计使您不必从组件中使用其界面。请参阅示例:

您需要使用的地方(因此模拟) IContainer 或类似的界面,您可能可以使用 Func, IIndex 和/或 Owned 关系类型。

希望这可以帮助!缺口

其他提示

不幸的是,当前有一个隔离器中的错误,可以防止伪造自动配置容器。我们正在努力尽快解决它。

同时,是否有一个原因您不使用AUTOFAC作为预期,这意味着它返回假实例,例如:

[TestFixture]
public class TestClass
{
    private ContainerBuilder builder;
    private IContainer container;

    [SetUp]
    public void SetUp()
    {
        builder = new ContainerBuilder();
    }

    [Test, Isolated]
    public void Test1()
    {
        var fakeProgram = Isolate.Fake.Instance<IProgram>();

        builder.RegisterInstance(fakeProgram).As<IProgram>();
        container = builder.Build();

        var program = container.Resolve<IProgram>();

        Assert.AreEqual(fakeProgram, program);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top