web-dev-qa-db-fra.com

Impossible de trouver testhost.dll. Veuillez publier votre projet de test et réessayer

J'ai une bibliothèque de classes de base dotnet simple avec une seule méthode de test XUnit:

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);
        }
    }
}

Si j'entre le projet sur la CLI et que je tape dotnet build le projet se construit. Si je tape dotnet test J'ai compris:

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.

Que dois-je changer pour exécuter le test?

Si cela aide, VS Code n'affiche pas non plus les tests dans son explorateur de tests.

45
Matt W

Dans mon cas, le problème était que je ciblais .NET Core 2.0 et que le passage à .NET Core 2.1 a résolu le problème. Cependant, j'utilisais Microsoft.NET.Test.SDK v16.4.0 au lieu de 15.9.0.

6
Andreas

Installation de Microsoft.NET.Test.Sdk package du gestionnaire de packages nuget a résolu mon problème.

51

J'avais créé une bibliothèque de classes et essayé d'y utiliser le package XUnit NuGet.

Ce que j'aurais dû faire a été créé un projet XUnit en utilisant cette commande: dotnet new xunit -n TestProject

J'ai trouvé cette page utile .

16
Matt W

Dans mon cas, le problème était que j'avais un projet d'extension pour xunit. Il existe également un projet de test pour tester les extensions. Quand j'ai couru dotnet test sur ma solution, mon projet d'extension a également été repris comme projet de test unitaire (il m'a fallu un certain temps pour le réaliser). La raison en est qu'il fait référence à certains packages xunit. L'un de ces packages xunit définit automatiquement le <IsTestProject>true</IsTestProject> propriété dans votre fichier csprj. C'est en fait une bonne chose puisque 99,99% des projets qui font référence à xunit sont en fait des tests unitaires. Je pourrais enfin résoudre ce problème en définissant explicitement

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

Manuellement dans mon fichier csproj. Ensuite, le problème a disparu.

Corrigé en installant xunit.runner.visualstudio.

8
Eugene

Cela m'est arrivé après la mise à jour de Microsoft.NET.Test.Sdk de la version 16.2.0 vers la version 16.4.0 avec <TargetFramework>netcoreapp2.0</TargetFramework>. Mise à jour vers <TargetFramework>netcoreapp3.0</TargetFramework> a résolu le problème pour moi.

7
SteveHansen

Si vous utilisez xUnit, assurez-vous que votre type de projet n'est pas aussi netstanderd. Comme xUnit ne prend pas en charge netstanderd , changez-le en coreapp2.0 ou autres.

2
Raj kumar

Ran dans cette erreur, la cause première était que les tests atteignaient la longueur maximale pour un chemin Windows (MAX_PATH), qui est défini comme 260 caractères.

1
S1r-Lanzelot

Je construisais un projet de test netcoreapp2.2 et j'essayais ensuite d'exécuter dotnet vstest du dossier bin. J'ai remarqué que les DLL de test Microsoft de:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />

n'étaient pas sortis dans mon dossier bin. Au lieu de simplement construire, j'ai exécuté une publication à la place qui incluait les DLL nécessaires dans le dossier de sortie et j'ai ensuite pu exécuter dotnet vstest De là.

0
Michael Armitage

Si vous ciblez netstandard2.0, cela ne fonctionnera pas. Si vous utilisez .NET Core. assurez-vous que le fichier .csproj contient les lignes suivantes:

<TargetFramework>netcoreapp3.0</TargetFramework>

et contient également le package Microsoft.NET.Test.Sdk

0
HarryKak