Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net specflow以编程方式获取场景描述_.net_Specflow - Fatal编程技术网

.net specflow以编程方式获取场景描述

.net specflow以编程方式获取场景描述,.net,specflow,.net,Specflow,我使用specflownunitexecutionreport命令生成测试的html报告,并将其复制到一个文件夹中,在该文件夹中我有测试的时间戳、报告、生成的html以及成功或失败时拍摄的屏幕截图(都是通过编程完成的)。但是文件夹的html报告没有当时的功能文件文本。我想知道,对于每个测试,我如何在运行时获取功能文件文本,以便将其复制到该文件夹。这不是一个真正的答案,但我需要给出一个格式化的响应,以便以后需要编辑 您真的需要通过重写控制盘来实现这一点吗,或者至少您真的需要重写testrunner

我使用specflow
nunitexecutionreport
命令生成测试的html报告,并将其复制到一个文件夹中,在该文件夹中我有测试的时间戳、报告、生成的html以及成功或失败时拍摄的屏幕截图(都是通过编程完成的)。但是文件夹的html报告没有当时的功能文件文本。我想知道,对于每个测试,我如何在运行时获取功能文件文本,以便将其复制到该文件夹。

这不是一个真正的答案,但我需要给出一个格式化的响应,以便以后需要编辑

您真的需要通过重写控制盘来实现这一点吗,或者至少您真的需要重写testrunner过程吗

例如,以下输出来自运行specflow生成的测试

[20:29:38][MyCode.Tests.dll] MyCode.Tests.MyFeature.Reload
[20:29:38][MyCode.Tests.MyFeature.Reload] Given I have a config reloader
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.GivenIHaveAConfigReloader() (0.1s)
[20:29:38][MyCode.Tests.MyFeature.Reload] And a config A that will unload
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.GivenAConfig("A") (0.0s)
[20:29:38][MyCode.Tests.MyFeature.Reload] And a config B that wont unload
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.GivenAConfigThatWontUnload("B") (0.0s)
[20:29:38][MyCode.Tests.MyFeature.Reload] When I reload my configs
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.WhenIReloadMyConfigs() (0.3s)
[20:29:38][MyCode.Tests.MyFeature.Reload] Then I should have 2 instances
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.ThenIShouldHaveInstances(2) (0.1s)
现在这是一个标准的开箱即用的结果,可能需要15分钟来设置。它完全受支持,并且免费提供。
或者您需要一些我在您的问题中遗漏的自定义内容吗?

如果您可以保证使用NUnit运行Specflow测试,那么您可以编写一个可以在Specflow运行时获取其输出的。我以前做过一段时间

你在一个班级注册

[NUnitAddin(
    Name = "RedGreenRefactor.DatCapture.NUnitAddIn", 
    Description = "Captures both test data and test output so that SpecFlow steps can be correctly consolidated by RedGreenRefactor",
    Type=ExtensionType.Core)]
public class Addin : IAddin
{       
    public bool Install(IExtensionHost host)
    {
       IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
        if ( listeners == null )
            return false;

        listeners.Install( new NUnitCapture() );
        return true;
    }       
}
你的插件的核心是这样的

public class NUnitCapture : NUnit.Core.EventListener 
{
...
public void TestOutput(NUnit.Core.TestOutput testOutput)
{
    var text = testOutput.Text.Trim();
    Debug.WriteLine(String.Format("[{0}]", text));
    if (text.StartsWith("Given")
        || text.StartsWith("When")
        || text.StartsWith("Then")
        || text.StartsWith("And"))
        {
            CreateStep(testOutput);
            return;
        }

        if (text.StartsWith("-> done"))
        {
            SetStepToSuccess();
            return;
        }

        if (text.StartsWith("-> error"))
        {
            SetStepToFail();
            return;
        }

        if (text.StartsWith("-> No matching step definition found for the step."))
        {
            SetStepToPending();
            return;
        }
    }

@AlSki我不想展示我所有的功能文件。我想在我的result.html中加入我正在用c#手工构建的原始功能文本好的,你能解释一下你想做什么吗?这不是技术问题,而是您想实现什么?此外,在生成html时记录的内容与链接文件的当前版本之间可能存在断开连接。通过嵌入内容,您可以避免这种脱节。@AlSki我已经写了一个问题,我正在处理的项目要求所有内容都是定制的,这使得事情对我来说更加复杂,我正在使用nunit,我将尝试这样做。谢谢,我会告诉你的。