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.
17 Réponses :
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 .
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
L'installation du package Microsoft.NET.Test.Sdk
partir du gestionnaire de packages nuget a résolu mon problème.
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.
Correction du xunit.runner.visualstudio
installant xunit.runner.visualstudio
.
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.
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.
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.
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.
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.
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.
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à.
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
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
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
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
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.
J'ai rencontré cela plusieurs fois et j'oublie toujours ce qui se passe. Plus récemment, j'ai eu:
Packages pour mon projet de test:
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.
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.
Vous avez cette erreur, en essayant de déboguer un test unitaire. Voici les étapes que j'ai essayées.
Yay!!! cela a fonctionné :-) Ne manquez jamais d'essayer la dernière étape ;-) J'espère que cela aide quelqu'un comme moi.
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.
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.