“GenerateFeatureFileCodeBehindTask”任务意外失败。 System.Exception:单元测试提供程序已设置

问题描述 投票:0回答:2

我已经在.NET Core 3.1中安装了一些specflow包

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="FluentAssertions" Version="6.1.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
    <PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.9.22" />
    <PackageReference Include="SpecFlow.xUnit" Version="3.9.22" />
    <PackageReference Include="SpecRun.SpecFlow" Version="3.9.7" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Hooks\" />
  </ItemGroup>    

</Project>

但是当我构建时,我得到了这个错误:

enter image description here

Severity    Code    Description Project File    Line    Suppression State
Error   MSB4018 The "GenerateFeatureFileCodeBehindTask" task failed unexpectedly.
System.Exception: Unit test Provider already set.
   at TechTalk.SpecFlow.UnitTestProvider.UnitTestProviderConfiguration.UseUnitTestProvider(String unitTestProviderName)
   at TechTalk.SpecFlow.xUnit.Generator.SpecFlowPlugin.GeneratorPlugin.Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPluginParameters generatorPluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration) in D:\a\1\s\Plugins\TechTalk.SpecFlow.xUnit.Generator.SpecFlowPlugin\GeneratorPlugin.cs:line 14
c# asp.net-core specflow
2个回答
0
投票

SpecRun.SpecFlow 和 SpecFlow.NUnit 不能在 SpecFlow 项目中同时安装。它们用于配置使用哪个单元测试运行器。

我假设您在创建 SpecFlow 项目时选择了 SpecFlow+ Runner。这会添加 SpecRun.SpecFlow NuGet 包。

当您手动添加 SpecFlow.NUnit 包时,您会收到此错误。 您可以在项目向导中选择 NUnit,以从一开始就使用 NUnit 开始项目。

此行为自 SpecFlow 3.0 起就存在。

单元测试提供商文档:https://docs.specflow.org/projects/specflow/en/latest/Installation/Unit-Test-Providers.html


0
投票

我安装了 xUnit,自从我为 SpecRun.SpecFlow 添加了 Nuget 包以来,我一直收到相同的错误(MSB4018“GenerateFeatureFileCodeBehindTask”任务意外失败。 System.Exception:单元测试提供程序已设置。)删除 SpecRun.SpecFlow Nuget 包后,错误消失了。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.