从代码运行SpecFlow场景

时间:2014-03-28 10:08:09

标签: c# unit-testing specflow

我试图从代码而不是通过Test Explorer或命令行运行SpecFlow场景。有人设法做到了吗?

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

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

编辑关于我为什么要这样做:
我们希望从TFS运行特定的方案。在TFS中将TestMethods连接到WorkItems非常麻烦,因为:

  • 您只能将一种测试方法分配给一个工作项
  • 对于每个工作项,您必须搜索方法名称,这本身就很麻烦,因为列表很长,有很多specflow场景。
  • 当您的specflow场景获得不同的名称(发生了很多)时,TFS无法再找到正确的方法
  • Specflow Scenario Outlines几乎无法使用,但它们是一个非常强大的功能。

我想创建一种机制,其中每个自动化工作项都获得相同的方法。此方法提取工作项ID并搜索并执行标记此工作项的方案。

1 个答案:

答案 0 :(得分:1)

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

我用过反射

  1. Find all Types with a DescriptionAttribute(又名特色)
  2. 使用TestAttribute和DescriptionAttribute(又称方案)查找他们的MethodInfos
  3. 将它们存储到词典
  4. 通过"功能标题/场景标题"使用Activator.CreateInstance和Invoke
  5. 你必须设置(私人)字段" testRunner"根据你的需要当然。