visual studio 中的 Specflow 扩展

Extension for Specflow in visual studio

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

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

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

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

如果您在文件路径前加上 file://,它将变为可点击的 link。像替换任何 URL.

一样,用“%20”替换空格

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

一个可能的解决方案是使用 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;
}

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