【问题标题】:Extension for Specflow in visual studioVisual Studio 中 Specflow 的扩展
【发布时间】:2017-12-11 01:39:39
【问题描述】:

我在 Visual Studio 上使用 specflow 进行了一组测试,其中一些测试的步骤如下:

Given the data in file /foo/bar/data.txt

我想实现一个 Visual Studio 扩展,这样我就可以单击 /foo/bar/data.txt 并打开文件。

我对使用 Visual Studio 文本装饰之类的东西有一个模糊的想法,但我真的不知道是否有更简单的方法。此外,我正在寻找适用于 Visual Studio 2013 及更高版本的解决方案,据我所知,旧版本不支持装饰。有什么想法吗?

【问题讨论】:

    标签: c# visual-studio specflow


    【解决方案1】:

    如果您在文件路径前加上 file://,它将成为可点击的链接。用“%20”替换空格,就像用任何 URL 一样。

    我知道这不是您所问问题的答案,但也许您不需要实现扩展?

    【讨论】:

    • 是的,这应该可以,但我无法更改通过相对路径引用文件的方式,因为这些文件是版本化的,因此它们可以位于不同的基本路径中。我找到了解决方案,我会自己回答
    【解决方案2】:

    一种可能的解决方案是使用 Visual Studio 插件创建一个新菜单项,这样当您单击一行并选择此菜单选项时,您可以执行一个操作(读取并解析该行并打开文件)。这可以按如下方式完成:

    File->New Project->Other Types -> Extensibility -> Visual Studio Add-in,并实现 IDTCommandTarget

    Commands2 commands = (Commands2)_applicationObject.Commands;
    object[] contextGUIDS = new object[] { };
    CommandBars cmdBars = (CommandBars)(_applicationObject.CommandBars);
    CommandBar vsBarProject = cmdBars["Code Window"];
    
    scenarioCommand = commands.AddNamedCommand2(_addInInstance, "OpenScenario", "Open scenario", "Open scenario data", true);
    scenarioCommand.AddControl(vsBarProject);
    

    然后在 Exec 方法中,只需读取该行,获取文件路径,然后:

    Process.Start(resource)
    

    当然,如果是 QueryStatus 方法中的 specFlow 文件,只需显示菜单选项:

    dynamic docName = _applicationObject.ActiveDocument.FullName;
    if (CmdName == OpenScenarioCmd && !((string)docName).EndsWith(".feature"))
    {
        StatusOption = (vsCommandStatus)vsCommandStatus.vsCommandStatusInvisible;
    }
    else if (CmdName == OpenScenarioCmd)
    {
        StatusOption = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled;
    }
    

    这并不完美,因为您必须显示一个菜单,但它确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多