防止项目被发现为测试项目

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

我有几个项目一个通用的util项目,它由一些基本测试类、辅助类等组成。 项目定义如下所示:

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

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
    <RootNamespace>SomeRoot.Util</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="FluentAssertions" Version="5.10.2" />
    <PackageReference Include="xunit" Version="2.4.1" />
  </ItemGroup>
</Project>

我假设由于它引用了 xUnit,因此 Visual Studio 和

dotnet test
命令都将其视为测试项目。 但既然不是,我想以某种方式阻止 Visual Studio 和
dotnet test
不将该项目识别为测试项目。

删除对 xUnit 的引用不是一个选项,因为基类需要 xUnit 包中的一些接口。

c# visual-studio xunit ms-project
2个回答
18
投票

基于https://github.com/microsoft/vstest/issues/1129,它似乎检查两件事:

IsTestProject
属性和
ProjectCapability
TestContainer
项目。为了安全起见,我将两者都删除了。

将其添加到项目文件中:

  <PropertyGroup>
    <IsTestProject>false</IsTestProject>
  </PropertyGroup>

  <ItemGroup>
    <ProjectCapability Remove="TestContainer" />
  </ItemGroup>

这是我遇到的错误,通过添加上述内容可以修复:

========== Starting test discovery ==========
Test project {ProjectName} does not reference any .NET NuGet adapter. Test discovery or execution might not work for this project.
It's recommended to reference NuGet test adapters in each test project in the solution.
Loaded 0 test records from the solution cache in 0.220 sec.
Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException: Testhost process exited with error: Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.TestPlatform.CoreUtilities, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.
File name: 'Microsoft.TestPlatform.CoreUtilities, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
   at Microsoft.VisualStudio.TestPlatform.TestHost.Program.Main(String[] args)
. Please check the diagnostic logs for more information.
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyOperationManager.ThrowOnTestHostExited(Boolean testHostExited)
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyOperationManager.SetupChannel(IEnumerable`1 sources, String runSettings)
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyDiscoveryManager.DiscoverTests(DiscoveryCriteria discoveryCriteria, ITestDiscoveryEventsHandler2 eventHandler)

0
投票

一个迟到的答案,但希望对那些有 xUnit 扩展项目并给出错误“测试项目未引用任何 .NET NuGet 适配器”的人仍然有帮助。

xunit.core
(v2-2.9.2)包(无论是直接引用还是通过
xunit
引用)都有一个设置
xunit.core.props
<IsTestProject>true</IsTestProject>
<ProjectCapability Include="TestContainer" />
文件,如Sean Hall的回答中所述MSVS 开发社区帖子791116 VSTest 判断该项目是测试项目的方式。

xUnit.net 页面 我应该使用哪些 NuGet 包? (v2)给出解决方案:不要引用

xunit
xunit.core
;相反,参考
xunit.extensibility.core
创建您自己的数据提供程序,并参考
xunit.extensibility.execution
创建您自己的测试发现和执行。

实际上,我需要将两者添加到我的 .csproj 中:

    <PackageReference Include="xunit.extensibility.core" Version="2.9.2" />
    <PackageReference Include="xunit.extensibility.execution" Version="2.9.2" />

根据 xUnit 从 v2 迁移到 v3,xUnit v3 将需要

xunit.v3.extensibility.core

© www.soinside.com 2019 - 2024. All rights reserved.