如何使用SpecFlow设置单独的跟踪/日志记录

rea*_*ime 2 c# testing bdd specflow gherkin

对于我的SpecFlow测试,我想在测试执行期间设置测试进度的单独记录/跟踪.我想写

  • 所有通过/失败的步骤
  • 开始/结束的场景
  • 开始/结束功能

到Windows事件日志(以便在测试期间将其与其他系统组件生成的事件日志消息同步).

我尝试使用[BeforeFeature],[BeforeScenario],[BeforeStep] Hooks来做这件事,但事实证明我在这个钩子中没有所有必需的信息.例如,我不知道如何获取当前步骤的当前文本行(包括行信息等)或当前步骤的结果(失败/通过).

有没有办法在执行测试期间在这些钩子中或以任何其他方式获取此信息?

如果不是:有没有办法以任何其他方式自定义Specflow创建的跟踪输出?

Vla*_*lov 5

为了提供ITestTracer的自定义实现,您应该为SpecFlow创建一个插件.

创建一个名为CustomTracer.SpecflowPlugin的类库项目.CustomTracer是您插件的首选名称.

然后将以下代码放入新程序集中

[assembly: RuntimePlugin(typeof(CustomTracer.SpecflowPlugin.CustomTracerPlugin))]

namespace CustomTracer.SpecflowPlugin
{
    public class CustomTracerPlugin : IRuntimePlugin
    {
        public void RegisterDependencies(ObjectContainer container)
        {

        }

        public void RegisterCustomizations(ObjectContainer container, RuntimeConfiguration runtimeConfiguration)
        {
            container.RegisterTypeAs<CustomTracer, ITestTracer>();
        }

        public void RegisterConfigurationDefaults(RuntimeConfiguration runtimeConfiguration)
        {

        }
    }

    public class CustomTracer : ITestTracer
    {
        // Your implementation here
    }
}
Run Code Online (Sandbox Code Playgroud)

编译程序集并放入规范所在的项目文件夹(其中.csprog文件是).

编辑app.config,specFlow部分包括:

<plugins>
  <add name="CustomTracer" path="." type="Runtime"/>
</plugins>
Run Code Online (Sandbox Code Playgroud)

这就对了.您的插件应该加载,并且应该在场景执行期间调用您的自定义ITracer实现.如果在调试下运行方案,您甚至可以调试它.