【问题标题】:SpecFlow wrongly using NUnitSpecFlow 错误地使用 NUnit
【发布时间】:2011-12-22 17:12:21
【问题描述】:

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

问题是,集成似乎无法正常工作,出现各种不同的错误。我选择了 MsTest 作为测试运行器,因为我不会为调用 NUnit 而烦恼(我想长期使用 NUnit,但目前我只想让一些 BDD 代码工作)。然而,生成的代码文件继续引用 NUnit——这显然是错误的,因为我刚刚告诉 SpecFlow 使用 MsTest 运行。我已经尽我所能再次调用代码生成,包括使用在工具 > 选项 > SpecFlow 中选择的 MsTest 选项创建一个全新的类库项目。

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

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

我做错了什么?文档没有帮助,据我所知,没有常见问题解答。

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

所以现在问题变成了一个稍微不同的问题:Tools > Options > SpecFlow > Test Runner Tool 字段做了什么(如果有的话)?

【问题讨论】:

    标签: nunit specflow


    【解决方案1】:

    对于 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>
    

    【讨论】:

      【解决方案2】:

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

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

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

      关于文档,您是否找到了 git hub wiki? https://github.com/techtalk/SpecFlow/wiki/Documentation

      【讨论】:

        【解决方案3】:

        我读到这篇文章的方式是,测试运行器与代码生成器的运行器完全不同,尽管当 MsTest 运行器不了解 NUnit(我认为)时,这并不总是有意义的。开箱即用,即使安装了 SpecFlow.MsTest nuget 包(相同版本),最新版本 (v2.3.2) 也不会将您的机器配置为在后台生成基于 MsTest 的类。我正在运行 VS2017 并将 Resharper 安装为我的“测试运行器”,但生成基于 MsTest 的代码的主要要求是更改 app.config。根据wiki documentation,您的 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】:

        我们使用 ReSharper 作为 SpecFlow 验收测试的运行器;它开箱即用,效果很好。虽然 ReSharper 不是免费的,但值得每一分钱......

        【讨论】:

          【解决方案5】:

          我从来没有让 SpecFlow 在 Visual Studio 中正常工作,我花了一些时间在它上面工作,但从来没有去任何地方。虽然我找到了these 在 Visual Studio 2010 中设置 NUnit 的说明,但我使用这个快捷方式运行我的 SpecFlow 测试效果很好。

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

          【讨论】:

          • 很好的提示,谢谢!我立即设置了菜单按钮,因为它看起来非常有用,所以不管这条查询线提供了一个方便的附带好处。虽然对 SpecFlow 感到羞耻,但看起来我并不是唯一一个在做它应该做的事情时遇到问题的人。实际产品有效,但 VS 集成不太正确。
          • 是的,我希望它更加集成,但我现在可以接受。现在它的用途确实超过了我的好处。很高兴小费有帮助!
          • 您是否运行了 specflow 安装程序,或者您是否使用 NuGet 将其添加到您的项目中?安装程序将安装所有集成组件,如 Visual Studio 集成,其中 nuget 安装仅添加必要的引用。
          • 我使用了 SpecFlow 安装程序,我真的不想在我的机器上安装 NuGet。虽然现在我已经这样使用了这么久,但我更习惯了,但它并不妨碍我。
          猜你喜欢
          • 2019-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-21
          • 2019-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多