105
votes

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

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

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.

Si j'entre le projet sur la CLI et tapez dotnet build le projet. Si je dotnet test j'obtiens ceci:

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

Que dois-je changer pour que le test s'exécute?

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


1 commentaires

Dans mon cas, c'est que vous ne pouvez pas réellement exécuter de tests sur netstandard2.0, car c'est une définition d'API, pas un runtime. Si vous basculez le TFM sur net472, les choses fonctionnent très bien. Alternativement, vous pouvez multi-cibler sur netcore + net472 par exemple et exécuter les deux.


17 Réponses :


25
votes

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

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

J'ai trouvé cette page utile .


5 commentaires

Après avoir exécuté cette commande, vous souhaiterez peut-être mettre à jour les packages nuget avec les nouvelles références de projet.


Ou installez nuget xunit.runner.visualstudion sur un projet existant;)


Est-ce une faute de frappe? Je ne trouve pas celui-là.


Si vous avez un projet existant, vous pouvez passer le nom de celui-ci avec --force pour le forcer à reconstruire le projet en tant que projet de test xUnit. Selon le commentaire de @ Manfred, vous devrez mettre à jour / rajouter toutes les références de projet que vous aviez dans ce projet.


@MattW Oui, cela ressemble à une faute de frappe. Je pense que @Lukas voulait dire xunit.runner.visualstudio que vous pouvez trouver sur nuget.org/packages/xunit.runner.visualstudio



160
votes

L'installation du package Microsoft.NET.Test.Sdk partir du gestionnaire de packages nuget a résolu mon problème.


10 commentaires

Cela était déjà inclus dans mon article - mais vous avez raison: il y aura de gros problèmes à exécuter des tests unitaires avec dotnet core sans cela.


"Microsoft.NET.Test.Sdk" était la pièce manquante lorsque vous ajoutez un projet de bibliothèque de classes et le transformez en projet de test. La meilleure chose à faire serait probablement d'ajouter un nouveau projet de test, puis d'ajouter les packages nuget nécessaires comme Rhino ou Moq, etc.


Création de la xunit .NET Standard 2.0, ajout de xunit , xunit.runner.visualstudio et Microsoft.NET.Test.Sdk au projet, toujours le même résultat. Je pense qu'il y a encore un autre facteur en jeu ...


Le problème dans mon cas a été causé par la création d'un projet netstandard2.0 au lieu d'un projet netcoreapp2.2 . Dès que je suis passé à ce dernier, cela a fonctionné. Les seuls packages nuget dont j'avais besoin étaient xunit , xunit.runner.visualstudio et Microsoft.NET.Test.Sdk .


Cela ne fonctionne pas pour moi. Microsoft.NET.Test.Sdk est installé.


Correction de mon problème après avoir créé une bibliothèque de classes et utilisé également nUnit.


La simple mise à jour vers la dernière version du package de cela a résolu le problème pour moi.


L'installation de Microsoft.NET.Test.Sdk n'a pas non plus fonctionné pour moi, JUSQU'À ce que dotnet clean


Il y a en effet un autre facteur en jeu. Mon testrunner était confus après avoir changé le TargetFramework de netstandard2.0 à net462 . Si vous accédez à la fenêtre de sortie et que vous la modifiez, affichez la sortie de Tests , vous verrez peut-être qu'il ne parvient pas à trouver testhost.dll, mais qu'il recherche dans le dossier netstandard2.0 . Je n'ai pas pu réparer le testrunner, j'ai donc créé un nouveau projet et juste copié les fichiers de test.


Cela devrait être la réponse acceptée. Travaille pour moi.



10
votes

Correction du xunit.runner.visualstudio installant xunit.runner.visualstudio .


0 commentaires

12
votes

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. Lorsque j'ai exécuté le dotnet test sur ma solution, mon projet d'extension a également été choisi 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 la <IsTestProject>true</IsTestProject> 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. Puis le problème a disparu.


0 commentaires

1
votes

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


0 commentaires

11
votes

Cela m'est arrivé après la mise à jour de Microsoft.NET.Test.Sdk de la v16.2.0 à la v16.4.0 avec <TargetFramework>netcoreapp2.0</TargetFramework> . La mise à jour vers <TargetFramework>netcoreapp3.0</TargetFramework> résolu le problème pour moi.


0 commentaires

25
votes

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.


0 commentaires

9
votes

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


2 commentaires

C'était mon problème en particulier. Doh! J'aurais dû l'attraper plus tôt. Merci pour votre réponse car elle m'a mis sur la bonne voie :)


La modification du projet de test en application .Net Core a permis au package xunit.runner.visualstudio de s'installer correctement. Veuillez noter que vous devrez probablement fermer votre solution et la recharger pour que VisualStudio trie les modifications.



5
votes

Je construisais un projet de test netcoreapp2.2 puis j'essayais d'exécuter dotnet vstest partir 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 en cours de sortie 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 partir de là.


0 commentaires

3
votes

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

<TargetFramework>netcoreapp3.0</TargetFramework>

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


0 commentaires

2
votes

même problème que j'ai rencontré pour le projet Nunit (.net core 3.1). J'utilisais Microsoft.NET.Test.SDK v16.6.1, j'ai rétrogradé la version à 15.9.0. Et ça commence à fonctionner


0 commentaires

7
votes

J'ai trouvé un problème de compatibilité très intéressant avec une version. J'ai fait une mise à jour comme d'habitude, mon code, et je suis passé à xUnit.runner.visualstudio 2.4.2. Il a cessé de fonctionner pour .Net Core 3.1. J'ai dû passer à la version 2.4.1 et cela a recommencé à fonctionner.

Informations complémentaires après l'un de mes commentaires.

Le package versions xunit.runner.visualstudio <= 2.4.1 inclut une référence à Microsoft.NET.Test.Sdk. Les versions ultérieures ne le font pas, vous devez donc ajouter la référence à votre projet.

Voir stackoverflow.com/a/63786758/3248302


8 commentaires

J'ai eu le même problème - pour certains des projets de test de ma solution. Le facteur commun pour les projets de test échouant après la mise à jour vers 2.4.2 était que ces projets manquaient Microsoft.Net.Test.Sdk (jamais eu de problème auparavant). Ajout du nuget 16.6.1 et retour au travail.


Bien, je ne savais pas ça. J'ai rétrogradé pour que ça marche


Je l'ai corrigé de la même manière. La rétrogradation du paquet xUnit.runner.visualstudio vers la version 2.4.1 a résolu le problème.


Je peux confirmer que c'est toujours un problème avec la version 2.4.3 de xunit.runner.visualstudio. La rétrogradation vers la version 2.4.1 résout le problème.


J'ai dû déclasser de nombreux projets à cause de cela. J'ai accidentellement tout mis à niveau et cela a cessé de fonctionner


xunit.runner.visualstudio versions de xunit.runner.visualstudio <= 2.4.1 incluent une référence à Microsoft.NET.Test.Sdk . Les versions ultérieures ne le font pas, vous devez donc ajouter la référence à votre projet. Voir stackoverflow.com/a/63786758/3248302 .


@Blisco Cela semble tout à fait vrai. Vous devriez faire de ce commentaire une réponse. C'est exactement ce que j'avais besoin de savoir pour résoudre mon problème.


Je mettrai à jour ma réponse pour refléter cela. Je suis très heureux que cela a fonctionné pour toi



0
votes

Si vous exécutez un projet par clonage, la solution consiste à installer Microsoft.NET.Test.Sdk. Comment: Outils> Gestionnaire de packages Nuget> Gérer les packages Nuget pour la solution ...> Rechercher Microsoft.NET.Test.Sdk et installer votre projet de test.


0 commentaires

8
votes

J'ai rencontré cela plusieurs fois et j'oublie toujours ce qui se passe. Plus récemment, j'ai eu:

  • Bibliothèque de classes -> Ciblage .NET Core 3.0
  • Projet de test -> Ciblage .NET Core 3.1

Packages pour mon projet de test:

  • Moq -> 4.14.1
  • xUnit -> 2.4.1
  • xUnit.Runner.VisualStudio -> 2.4.2

Je voyais:

Impossible de trouver C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll. Veuillez publier votre projet de test et réessayer.

Et tout ce que j'avais à faire était d'ajouter à mon projet de test le package nuget manquant: "Microsoft.NET.Test.SDK"

Tout était revenu à la normale à ce stade.


0 commentaires

0
votes

Cela peut également être dû à une tentative par inadvertance d'exécuter un projet non test, cela se produit généralement lorsque votre filtre de fichiers de test est trop large.


0 commentaires

0
votes

Vous avez cette erreur, en essayant de déboguer un test unitaire. Voici les étapes que j'ai essayées.

  • Étape 1: Installé Microsof.TestPlatform.TestHost et essayé d'exécuter le test mais pas de chance.
  • Étape 2: Changement du framework Target de .NET Core 2.0 à 2.1 et tentative d'exécuter le test mais pas de chance.
  • Étape 3: fermé et ouvert VS2017 et essayé de s'exécuter.

Yay!!! cela a fonctionné :-) Ne manquez jamais d'essayer la dernière étape ;-) J'espère que cela aide quelqu'un comme moi.


0 commentaires

0
votes

Cette erreur peut se produire si vous xunit.runner.visualstudio à niveau xunit.runner.visualstudio vers une version supérieure à 2.4.1. Les versions jusqu'à et y compris 2.4.1 incluent une référence à Microsoft.NET.Test.Sdk mais les versions ultérieures ne le font pas, vous devez donc inclure la référence dans votre propre projet.

Fait intéressant, j'ai trouvé que NCrunch exécutait toujours mes tests sans référence supplémentaire, même si je ne pouvais pas les exécuter via la CLI.


0 commentaires