C# 从代码运行SpecFlow场景

C# 从代码运行SpecFlow场景,c#,unit-testing,specflow,C#,Unit Testing,Specflow,我试图从代码中运行SpecFlow场景,而不是通过testexplorer或命令行。有人做到了吗 从一个场景中,我可以用递归提取方法名和测试方法,但是我不能运行这个场景方法。它似乎需要一个适当的初始化和拆卸,但我无法做到这一点 我的第一个想法是使用TechTalk.SpecFlow.TestRunner类,但它似乎没有场景选择方法 编辑我为什么要这样做: 我们希望从TFS运行特定场景。将TestMethods连接到TFS中的工作项非常麻烦,因为: 只能将一个testmethod分配给一个wor

我试图从代码中运行SpecFlow场景,而不是通过testexplorer或命令行。有人做到了吗

从一个场景中,我可以用递归提取方法名和测试方法,但是我不能运行这个场景方法。它似乎需要一个适当的初始化和拆卸,但我无法做到这一点

我的第一个想法是使用
TechTalk.SpecFlow.TestRunner
类,但它似乎没有场景选择方法

编辑我为什么要这样做:
我们希望从TFS运行特定场景。将TestMethods连接到TFS中的工作项非常麻烦,因为:

  • 只能将一个testmethod分配给一个workitem
  • 对于每个workitem,您必须搜索方法名称,因为列表很长,有很多specflow场景,搜索方法名称本身就是一个麻烦
  • 当您的specflow场景获得不同的名称时(这种情况经常发生),TFS将无法再找到正确的方法
  • Specflow场景大纲实际上无法使用,而它们是一个非常强大的功能

我想创建一种机制,其中每个自动工作项都会被分配相同的方法。此方法提取工作项id并搜索,然后执行带有此工作项标记的场景

我也遇到了类似的问题,因为我的测试在场景之间有一些依赖关系(我很遗憾,但它为每个功能文件节省了大量的复制粘贴行)。当然,在大多数情况下,我会坚持使用孤立的场景

我使用了反射

  • (又名特征)
  • 使用TestAttribute和DescriptionAttribute(又名场景)查找他们的MethodInfos
  • 把它们存到字典里
  • 使用Activator.CreateInstance和Invoke通过“功能的标题/场景的标题”调用它们

  • 当然,您必须根据需要设置(私有)字段“testRunner”。

    我认为从代码中运行场景有点棘手,因为您必须设置testRunner环境,我认为这可能有点复杂。你能简单地解释一下你想通过这样做实现什么吗?也许有一种更简单的方法来解决您的问题,而不是通过代码运行场景。@realtime,谢谢您的提问,我添加了一个解释。谢谢您的解释!抱歉,这篇文章目前有点离题。但我不理解将工作项连接到测试方法背后的意义。如果我有一个WorkItem,它会解决某个bug,可能是我想要的特性。然后我想要一个单独的测试用例,专门解决这个问题。单凭这一点就可以在可追溯性方面大有裨益!单个测试用例(在我的世界中)等于一个功能文件。因此,我将功能(或文件)连接到工作项。场景名称的更改不再重要,您需要维护的跟踪连接也少了很多。