【问题标题】:XUnit Test with autofac使用 autofac 进行 XUnit 测试
【发布时间】:2017-04-17 11:41:02
【问题描述】:

我点击此链接https://github.com/dennisroche/xunit.ioc.autofac 使用 autofac 创建 XUnit 测试,但出现错误

请求的服务“Xunit.Sdk.TestOutputHelper”尚未注册。为避免此异常,请注册组件以提供服务,使用 IsRegistered() 检查服务注册,或使用 ResolveOptional() 方法解决可选依赖项。 我添加了以下代码:

        builder.Register(context => new TestOutputHelper())
            .As<ITestOutputHelper>()
            .InstancePerLifetimeScope();

我错过了上面链接中的任何内容吗?

【问题讨论】:

    标签: autofac xunit2


    【解决方案1】:

    TL;DR:

    确保在使用这个库时将类型 TestOutputHelper 也注册为 self。

    加长版:

    AutofacTestInvokerhttps://github.com/dennisroche/xunit.ioc.autofac/blob/master/src/xunit2.ioc.autofac/AutofacTestInvoker.cs)需要具体类TestOutputHelper(不是ITestOutputHelper!)调用TestOutputHelper.Initialize(IMessageBus, ITest),接口中没有,通过创建的ILifetimeScope解决。在您的示例中,您将其注册为接口,因此对于 Autofac,根本没有 TestOutputHelper 可用于解析。

    编辑:文档已被改编。详情请见https://github.com/dennisroche/xunit.ioc.autofac/pull/9

    【讨论】:

    • 我注册为`builder.RegisterType().AsSelf().As().InstancePerLifetimeScope();`
    【解决方案2】:

    您正在注册 ITestOutputHelper,而不是 TestOutputHelper,并且似乎后者是某些构造函数所需要的。

    如果您在某些测试中使用 TestOutputHelper,则应将其替换为 ITestOutputHelper。

    【讨论】:

    • 我没有使用TestOutputHelper,我使用了ITestOutputHelper,好像库中某处使用了TestOutputHelper
    最近更新 更多