未识别的元素unitTestProvider

6
我刚开始接触SpecFlow,使用SpecFlow包和附带NUnit的基本贡献包进行了安装设置。
添加了我的特性文件后,我遇到了一些问题,需要使用自定义工具来生成SpecFlow单个文件生成(通过移除属性中的一个选项解决了这个问题)。
然后,当我重新构建解决方案时,在appconfig文件中的unittestprovider中出现了一些无法识别的元素。
错误提示为:[SpecFlow] System.Configuration.ConfigurationErrorsException: Unrecognized element 'unitTestProvider'。
我的appconfig文件specflow部分如下:
<specFlow>
    <unitTestProvider name="NUnit" />
    <plugins>
      <add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="..\packages\Baseclass.Contrib.SpecFlow.Selenium.NUnit.1.3.1\tools" /> 
    </plugins>

  </specFlow>

你正在使用哪个版本的SpecFlow? - devNull
@devNull SpecFlow版本3.0.213。 - PavanS
2个回答

9
那个配置文件不能用于SpecFlow 3.0及以上版本。您可以阅读文档以了解如何升级到3.0,点击这里。它说:

单元测试提供程序配置的更改

在之前的SpecFlow版本中,用于执行测试的单元测试提供程序是在您的app.config文件中配置的。从SpecFlow 3开始,我们强烈建议通过安装可用的包来配置您的单元测试提供程序(请参见下文)。

同时还有:

specflow.json

未来,我们建议使用specflow.json配置SpecFlow,而不是app.config。.NET Core项目需要specflow.json(不支持app.config)。虽然Full Framework项目使用specflow.json是可选的,但我们建议迁移到新格式。有关更多详细信息,请参阅文档中的配置。

因此,您可以从app.config中删除SpecFlow,并创建一个名为specflow.json的文件。您可以将以下内容放入其中:
{
    "language": {
        "feature": "en-US"
    }
}

如果您希望更改语言,可以进行相应的更改。

如果您还没有安装测试运行器,则需要将其添加到项目中。在您的情况下,您需要使用NUnit,因此请使用NuGet添加SpecFlow.NUnit。通常,您需要安装示例项目中列出的NUnit所需的所有程序包。


你好,我尝试通过添加specflow.json文件并添加Nunit包来从app.config中移除specflow。但是现在仍然存在问题,显示Unit测试提供程序已经设置。 - PavanS
@PavanS 你可能安装了多个测试运行程序包,而实际上你只需要一个。你能否分享项目文件呢?可以通过编辑问题或在pastebin上分享。 - Mika Sundland

0

所以我通过以下步骤解决了同样的问题:

  1. 进入解决方案的NuGet包管理器,查找已安装的SpecFlow版本,发现是3.1.97(自行更新),卸载并安装整个项目包括测试框架(SpecFlow)的3.1.76版本。

  2. 对于SpecFlow.NUnit,卸载并安装3.1.76版本,但不要选择测试框架(取消旁边的复选框),其他项目应该已经恢复到之前的版本。

  3. 对于SpecFlow.Tools.MsBuild.Generation,执行第2步,并重新启动计算机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接