【问题标题】:Logging with SpecRun.Specflow and xUnit(ITestOutputHelper) - BoDi.ObjectContainerException使用 SpecRun.Specflow 和 xUnit(ITestOutputHelper) 进行日志记录 - BoDi.ObjectContainerException
【发布时间】:2021-02-04 08:48:28
【问题描述】:

我正在尝试将日志添加到 specflow 测试中,但不幸的是我遇到了异常。我正在使用SpecRun.Specflow v3.4.19 库和xunit。在尝试通过上下文注入注入 ITestOutputHelper 时,我得到了这个:

无法解析接口:Xunit.Abstractions.ITestOutputHelper(解析路径:SpecflowTesting.Steps.CalculatorStepDefinitions) 堆栈跟踪: BoDi.ObjectContainerException:接口无法解析:Xunit.Abstractions.ITestOutputHelper(解析路径:SpecflowTesting.Steps.CalculatorStepDefinitions) TypeRegistration.Resolve(ObjectContainer 容器, RegistrationKey keyToResolve, ResolutionList resolutionPath) ObjectContainer.ResolveObject(RegistrationKey keyToResolve, ResolutionList resolutionPath) ObjectContainer.Resolve(类型 typeToResolve,ResolutionList resolutionPath,字符串名称) c__DisplayClass57_0.b__0(ParameterInfo p) SelectArrayIterator2.ToArray() Enumerable.ToArray[TSource](IEnumerable1 来源) ObjectContainer.ResolveArguments(IEnumerable`1 参数,RegistrationKey keyToResolve,ResolutionList resolutionPath) ObjectContainer.CreateObject(Type type, ResolutionList resolutionPath, RegistrationKey keyToResolve) TypeRegistration.Resolve(ObjectContainer 容器, RegistrationKey keyToResolve, ResolutionList resolutionPath) ObjectContainer.ResolveObject(RegistrationKey keyToResolve, ResolutionList resolutionPath) ObjectContainer.Resolve(类型 typeToResolve,ResolutionList resolutionPath,字符串名称) ObjectContainer.Resolve(类型 typeToResolve,字符串名称) TestObjectResolver.ResolveBindingInstance(Type bindingType, IObjectContainer container) 第 11 行 lambda_method(闭包,IContextManager,Int32) BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration) 第 69 行 TestExecutionEngine.ExecuteStepMatch(BindingMatch match, Object[] arguments) 第 514 行 RunnerTestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,Object[] 参数) TestExecutionEngine.ExecuteStep(IContextManager contextManager, StepInstance stepInstance) 第 435 行 TestExecutionEngine.OnAfterLastStep() 第 260 行 RunnerTestExecutionEngine.OnAfterLastStep() TestRunner.CollectScenarioErrors() 第 60 行 CalculatorFeature.ScenarioCleanup() CalculatorFeature.AddTwoNumbers() 第 8 行 StaticOrInstanceMethodExecutor.ExecuteInternal(ITestThreadExecutionContext testThreadExecutionContext) StaticOrInstanceMethodExecutor.Execute(ITestThreadExecutionContext testThreadExecutionContext) TestNodeTask.Execute()

用法:

    private ITestOutputHelper _testOutputHelper;

    private readonly ScenarioContext _scenarioContext;

    public CalculatorStepDefinitions(ScenarioContext scenarioContext, ITestOutputHelper testOutputHelper)
    {
        _scenarioContext = scenarioContext;
        _testOutputHelper = testOutputHelper;
    }

【问题讨论】:

    标签: c# xunit specflow


    【解决方案1】:

    通过 SpecRun.SpecFlow 包,您将 SpecFlow+ Runner 用作单元测试运行器。您没有使用 xUnit,因此您不能使用 xUnit API 来记录内容。

    你有两个选择:

    1. 您使用 SpecFlow+ Runner 并使用ISpecFlowOutputHelper 接口来编写您的日志条目

    2. 您更改为 SpecFlow.xUnit 包(并删除 SpecRun.SpecFlow 包)以使用 xUnit 作为单元测试运行器。然后你仍然可以使用ISpecFlowOutputHelper 接口或直接使用xUnit API。


    全面披露:我是 SpecFlow 和 SpecFlow+ 的社区经理

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2012-05-11
      • 2011-03-01
      相关资源
      最近更新 更多