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;
}
它并不完美,因为你必须显示一个菜单,但它确实有效。
我在 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;
}
它并不完美,因为你必须显示一个菜单,但它确实有效。