找不到testhost.dll。请发布您的测试项目,然后重试

Mat*_*t W 31 c# unit-testing xunit.net .net-core

我有一个具有单个XUnit测试方法的简单dotnet核心类库:

TestLib.csproj:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.SDK" Version="15.9.0" />
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.console" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runners" Version="2.0.0" />
  </ItemGroup>

</Project>

BasicTest.cs:
using Xunit;

namespace TestLib
{
    public class BasicTest
    {
        [Fact(DisplayName = "Basic unit test")]
        [Trait("Category", "unit")]
        public void TestStringHelper()
        {
            var sut = "sut";
            var verify = "sut";

            Assert.Equal(sut, verify);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在CLI上输入项目并键入dotnet build项目构建。如果输入,dotnet test我得到以下信息:

C:\git\Testing\TestLib> dotnet test
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build started, please wait...
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build completed.

Test run for C:\git\Testing\TestLib\bin\Debug\netstandard2.0\TestLib.dll(.NETStandard,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 16.0.0-preview-20181205-02
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Unable to find C:\git\Testing\TestLib\bin\Debug\netstandard2.0\testhost.dll. Please publish your test project and retry.

Test Run Aborted.
Run Code Online (Sandbox Code Playgroud)

我需要更改什么才能运行测试?

如果有帮助,VS Code也不会在其测试浏览器中显示测试。

Arv*_*iya 36

Microsoft.NET.Test.Sdk从nuget软件包管理器安装软件包解决了我的问题。

  • 在我的情况下,问题是由创建`netstandard2.0`项目而不是`netcoreapp2.2`项目引起的。当我切换到后者时,它就起作用了。我唯一需要的nuget包是xunit,xunit.runner.visualstudio和Microsoft.NET.Test.Sdk。 (9认同)
  • 创建了 .NET Standard 2.0 lib,在项目中添加了 `xunit`、`xunit.runner.visualstudio` 和 `Microsoft.NET.Test.Sdk`,结果仍然相同。我认为还有另一个因素在起作用...... (3认同)
  • 当您添加类库项目并将其转换为测试项目时,“Microsoft.NET.Test.Sdk”是缺失的部分。可能最好的办法是添加一个新的测试项目,然后添加所需的 nuget 包,如 Rhino 或 Moq 等...... (2认同)
  • 安装 Microsoft.NET.Test.Sdk 对我来说也不起作用,直到我做了 `dotnet clean` (2认同)

And*_*eas 36

就我而言,问题是我的目标是 .NET Core 2.0,而切换到 .NET Core 2.1 解决了这个问题。但是我使用的是 Microsoft.NET.Test.SDK v16.4.0 而不是 15.9.0。


Max*_*ios 16

我发现了一个非常有趣的版本兼容性问题。我确实按照正常做法升级了我的代码,然后切换到 xUnit.runner.visualstudio 2.4.2。它停止为 .Net Core 3.1 工作。我不得不降级到 2.4.1,它又开始工作了。

在我的评论之一之后的附加信息。

xunit.runner.visualstudio 版本 <= 2.4.1 包包含对 Microsoft.NET.Test.Sdk 的引用。更高版本不会,因此您需要将引用添加到您的项目中。

/sf/answers/4465073091/

  • 我遇到了同样的问题 - 对于我的解决方案中的一些测试项目。更新到 2.4.2 后测试项目失败的常见因素是这些项目缺少 Microsoft.Net.Test.Sdk(以前从来没有出现过问题)。添加了 16.6.1 nuget 并再次恢复工作。 (2认同)
  • `xunit.runner.visualstudio` 版本​​ &lt;= 2.4.1 包含对 `Microsoft.NET.Test.Sdk` 的引用。更高版本没有,因此您需要将引用添加到您的项目中。请参阅 /sf/answers/4465073091/。 (2认同)

Mat*_*t W 15

我创建了一个类库,并尝试在其中使用XUnit NuGet包。

我应该使用以下命令创建一个XUnit项目: dotnet new xunit -n TestProject

我发现这个有用的页面

  • 执行此命令后,您可能要更新新项目引用的nuget包。 (2认同)
  • @MattW 是的,这看起来像是一个错字。我认为@Lukas 的意思是“xunit.runner.visualstudio”,你可以在 https://www.nuget.org/packages/xunit.runner.visualstudio/ 找到它 (2认同)

Dev*_*der 13

我遇到过几次,我总是忘记发生了什么。最近我有:

  • 类库 -> 面向 .NET Core 3.0
  • 测试项目 -> 面向 .NET Core 3.1

我的测试项目的包:

  • 最小起订量 -> 4.14.1
  • xUnit -> 2.4.1
  • xUnit.Runner.VisualStudio -> 2.4.2

我看到:

无法找到 C:\PATH\bin\Debug\netstandard2.0\testhost.dll。请发布您的测试项目并重试。

我需要做的就是将丢失的 nuget 包添加到我的测试项目中:“Microsoft.NET.Test.SDK”

此时一切恢复正常。


Raj*_*mar 10

如果您使用的是 xUnit,请确保您的项目类型不是 netstanderd。由于 xUnit 不支持 netstanderd,请将其更改为 coreapp2.0 或其他。


Jps*_*psy 8

我发现有5 个因素至关重要。
\n(其中 3 个以混合形式分布在其他答案中。)

\n

1 到 4:
\n在适用于您的 .NET Core 版本的版本中添加这些 Nuget 包:

\n
    \n
  • 单位
  • \n
  • 微软.NET.Test.Sdk
  • \n
  • xunit.runner.visualstudio
  • \n
  • Microsoft.AspNetCore.Mvc.测试
  • \n
\n

5:
\n现在确保 Microsoft.NET.Test.Sdk 设置为 NOT ExcludeAssets。为此,请使用以下方法之一:

\n
    \n
  1. 在 Project Explorer 中,转到 Dependencies \xe2\x80\x93> NuGet 并找到 Sdk 包。右键单击它并选择“属性”。从排除资产字段中删除“全部”。
  2. \n
  3. 或者编辑 .csproj 文件并ExcludeAssets="All"从 Sdk 包条目中删除(如果存在):
  4. \n
\n
<!-- Bad: -->\n<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" ExcludeAssets="All" />\n<!-- Good: -->\n<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />\n
Run Code Online (Sandbox Code Playgroud)\n


Ogn*_*rov 7

从今天 18.05.2023 开始,使用 VS 2022,除了 xunit 之外,您还必须安装以下内容,否则 VS 将无法检测到测试。

  • Microsoft.NET.Test.Sdk - 这将解决“TestPlatformException:找不到测试主机”
  • xunit.runner.visualstudio - 这将连接 VS runner 可见的测试


Eug*_*yeu 6

通过安装修复了它xunit.runner.visualstudio


Wil*_*che 6

就我而言,问题是我有一个xunit扩展项目。还有一个测试项目来测试扩展。当我运行dotnet test我的解决方案时,我的扩展项目也被选为单元测试项目(花了一些时间才意识到这一点)。这样做的原因是它引用了一些xunit软件包。这些xunit软件包之一自动<IsTestProject>true</IsTestProject>在csprj文件中设置属性。这实际上是一件好事,因为99.99%的引用xunit的项目实际上是单元测试。我终于可以通过显式设置解决此问题

     <PropertyGroup>
...
        <IsTestProject>false</IsTestProject>
...
      </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

手动在我的csproj文件中。然后问题解决了。


Har*_*dis 6

如果您的目标是 netstandard2.0,这将不起作用。如果使用.NET Core。确保 .csproj 包含以下行:

<TargetFramework>netcoreapp3.0</TargetFramework>

并且还包含包Microsoft.NET.Test.Sdk


Bli*_*sco 6

如果升级xunit.runner.visualstudio到 2.4.1 以上的版本,可能会出现此错误。2.4.1 及之前的版本包含对 的引用,Microsoft.NET.Test.Sdk但更高版本不包含,因此您需要在自己的项目中包含该引用。

有趣的是,我发现 NCrunch 仍然在没有额外参考的情况下运行我的测试,即使我无法通过 CLI 运行它们。


Äkw*_*wav 6

必须添加Microsoft.TestPlatform.TestHost才能得到testhost.dll。我发现在这个答案https://github.com/dotnet/sdk/issues/7171#issuecomment-261506546


Ste*_*sen 5

将Microsoft.NET.Test.Sdk从v16.2.0更新到v16.4.0后,这发生在我身上<TargetFramework>netcoreapp2.0</TargetFramework>。正在<TargetFramework>netcoreapp3.0</TargetFramework>为我解决此问题。


Mic*_*age 5

我正在构建一个 netcoreapp2.2 测试项目,然后尝试dotnet vstest从 bin 文件夹运行。我注意到 Microsoft 测试 DLL 来自:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
Run Code Online (Sandbox Code Playgroud)

没有被输出到我的 bin 文件夹。我不只是构建,而是运行了一个发布,它确实在输出文件夹中包含了必要的 DLL,然后我就可以dotnet vstest从那里运行了。