SpecFlow错误地使用NUnit

时间:2011-11-05 16:22:33

标签: nunit specflow

我(今天)第一次尝试过SpecFlow。我正在玩VS2010 Pro中创建一个新的类库并添加一个SpecFlow功能定义文件。

事情是,集成似乎没有正常工作,有各种不同的错误。我选择了MsTest作为测试运行器,因为我不能打扰调用NUnit(我想长期使用NUnit,但目前我只想让一些BDD代码工作)。然而,生成的代码文件继续引用NUnit - 这显然是错误的,因为我刚刚告诉SpecFlow使用MsTest运行。我已经做了我能想到的再次调用代码生成的所有内容,包括使用Tools>中选择的MsTest选项创建一个全新的类库项目。选项> SpecFlow。

如果我将测试运行器字段设置为“自动”并右键单击某个功能文件,然后选择“运行SpecFlow Scenarios”,则会收到错误消息“找不到匹配的测试运行器”。

如果我改为将测试运行器字段更改为MsTest,则在执行相同操作时会收到不同的错误消息 - “对象引用未设置为对象的实例”。我对此并不感到惊讶,因为即使我已经明确要求MsTest,它仍在尝试运行NUnit测试,但显然它不应该是nullref并将其呈现给用户。

我做错了什么?文档没有帮助,据我所知,没有FAQ。

编辑#1 :我已经确定我正在寻找的实际设置是使用字段App.Config使用<unitTestProvider name="MsTest" />提供的。我可以看到发生了什么 - Visual Studio选项菜单中的字段似乎没有修改您当前正在处理的项目。事实是,这使得它看起来像该领域根本不做任何事情。我现在已说服SpecFlow生成MsTest类并使用MSTest运行程序运行。

所以现在这个问题变成了一个稍微不同的问题:工具&gt;什么(如果有的话);选项&gt; SpecFlow&gt; Test Runner Tool字段可以吗?

5 个答案:

答案 0 :(得分:9)

对于VS2010,正确的值是MsTest.2010而不是MsTest,如文档所述。更改您的app.config(对于测试程序集),它将正常工作(至少使用SpecFlow 1.8)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
  </configSections>
  <specFlow>
      <unitTestProvider name="MsTest.2010" />
      <!-- For additional details on SpecFlow configuration options see https://github.com/techtalk/SpecFlow/wiki/Configuration -->
  </specFlow>
</configuration>

答案 1 :(得分:7)

回答你的最新问题。什么是设置“工具&gt;选项&gt; SpecFlow&gt;测试运行器工具”此设置控制实际运行测试的内容,而不是生成测试代码的内容。如果它设置为auto我相信它会查看App.config文件,你在其中设置了unitTestProvider以确定运行测试的最佳工具。由与SpecFlow相同的人员制作的替代测试跑者是SpecRun http://www.specrun.com/

因此,当您运行测试时,它将使用此选项。正如您所发现的那样,代码生成器使用配置文件来确定它应该生成什么类型​​的测试(mstest / nunit ..)

如果运行specfow安装程序(https://github.com/downloads/techtalk/SpecFlow/SpecFlowSetup_v1.8.1.msi)以在更改App.config文件时安装所有Visual Studio Intergration组件,则通常会提示使用新提供程序重新生成功能。手动执行此操作的方法是右键单击功能并选择“运行自定义工具”

关于文档你找到了git hub wiki吗? https://github.com/techtalk/SpecFlow/wiki/Documentation

答案 2 :(得分:2)

我们正在使用ReSharper作为SpecFlow验收测试的跑步者;它开箱即用。虽然ReSharper不是免费的,但值得每一分钱......

答案 3 :(得分:2)

我读过这个的方式是测试运行器与代码生成器的完全不同,尽管当MsTest运行器不了解NUnit时我们总是没有意义(I认为)。开箱即用,最新版本(v2.3.2)即使与SpecFlow.MsTest nuget软件包(相同版本)一起安装,也不会将您的机器配置为在后台生成基于MsTest的类。我正在运行VS2017并安装了Resharper作为我的测试跑步者&#39;但是生成基于MsTest的代码的主要要求是对app.config的更改。根据{{​​3}},您还需要在app.config中使用以下内容。保存配置时,系统会提示您重新生成文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="specFlow"
             type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>
  </configSections>
  <specFlow>
    <unitTestProvider name="MsTest" />
  </specFlow>
</configuration>

答案 4 :(得分:1)

我从来没有能够从Visual Studio中使用SpecFlow,我花了一些时间研究它但从未去过任何地方。虽然我在Visual Studio 2010中找到了关于设置NUnit的these说明,但我使用此快捷方式运行我的SpecFlow测试效果很好。

总体而言,我们使用PowerShell运行大量测试,并且能够将NUnit命令行运行器和SpecFlow报告生成器合并到一个我可以轻松运行的脚本中。