Visual Studio 2013 erkennt keine Komponententests


146

Ich habe eine einfache Lösung in Visual Studio 2013, die aus einem Webprojekt, einem Bibliotheksprojekt und einem Unit-Test-Projekt besteht. Wenn ich die Lösung öffne und versuche, die Komponententests auszuführen, werden sie von Visual Studio nicht entdeckt. Um die Tests auszuführen, versuche ich, in das Menü zu gehen und Test -> Ausführen -> Alle Tests ausführen oder das Test-Explorer-Fenster zu öffnen. Durch diese Methoden entdeckt Visual Studio keine Tests in der Lösung.

Erstellen Sie zuerst ein einfaches Unit-Test-Projekt und versuchen Sie, den Test auszuführen. Visual Studio weiß, dass Sie den Test entdecken und ich kann ihn ausführen. Wenn ich dann meine vorherige Lösung öffne, entdeckt Visual Studio jetzt alle Tests. Ich versuche, meine Lösung zu speichern, aber wenn ich sie schließe und wieder öffne, ohne vorher ein Unit-Test-Projekt zu erstellen, findet das Visual Studio die Tests nicht wieder. Dies ist ein sehr seltsames Verhalten, von dem ich nicht weiß, warum dies geschieht.

Ich habe in diesem Projekt, in dem der in die Visual Studio Team Foundation integrierte Quellcodeverwaltungs-Git verwendet wurde, alleine gearbeitet. Das Problem von Visual Studio nicht entdecken die Unit-Tests beginnen, wenn ein neues Element in das Projekt kam und wenn ich die Lösung über die Quellcodeverwaltung online neu erstellen muss. Zuvor wurden alle Tests immer von Visual Studio entdeckt.

Für die Erstellung der Unit-Tests verwende ich die DLL Microsoft.VisualStudio.QualityTools.UnitTestFramework. Meine Version von Visual Studio lautet: Microsoft Visual Studio Express 2013 für Web Version 12.0.30723.00 Update 3. Meine Version von .net Framework ist 4.5.50938.

Alle meine Tests sind wie folgt:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}

2
Sind das Async-basierte Unit-Tests?
Jamie Keeling

Ich bin mir nicht sicher, was das Problem war, aber das Ausführen als Administrator hat das Problem für mich behoben.
Sriram Sakthivel

Alle synchronisierten Unit-Tests
Miguelbgouveia

2
Haben Sie einen externen Testläufer (wie ReSharpers oder NCrunch) ausprobiert? Möglicherweise ist Ihre Installation fehlerhaft (also installieren Sie VS neu)
Carsten

1
Nichts davon hat das Problem für mich behoben :( Was für eine Katastrophe. Ich habe NUnit aufgegeben und verlasse mich auf UnitTestFramework - seltsamerweise das gegenteilige Problem aus dem OP
Adam

Antworten:


210

Einige Dinge, die mir aufgefallen sind, muss ich von Zeit zu Zeit tun, damit Tests richtig angezeigt werden.

  1. Wenn sich Ihre Lösung auf einem geschützten Laufwerk befindet, für das Sie Administratorzugriff zum Lesen / Schreiben benötigen, wird manchmal nur ein Teil der Tests ausgeführt. Führen Sie in diesem Fall auf jeden Fall VS als Administrator aus.

  2. Wenn Ihre Lösung 64-Bit ist, stellen Sie sicher, dass Test> Testeinstellungen> Standardprozessorarchitektur auf x64 eingestellt ist. Manchmal wird es auf x86 gesetzt. Stellen Sie es auf x64 ein und erstellen Sie es neu.

  3. Manchmal reicht es aus, Visual Studio neu zu starten, da der Test-Explorer erneut gestartet wird.

  4. Vergessen Sie nicht, das Testprojekt / die Testlösung tatsächlich zu erstellen. (Wenn Sie möchten, dass es mit den übrigen Projekten erstellt wird, klicken Sie mit der rechten Maustaste auf Ihre Lösung> Eigenschaften> Konfigurationseigenschaften> Konfiguration> Aktivieren Sie das Kontrollkästchen "Erstellen" für Ihr Testprojekt.)

  5. Stellen Sie sicher, dass sich die Tests in einem publicAbschnitt Ihrer Testklasse befinden


34
Mir ist klar, dass diese Antwort etwas spät ist, aber meine Google-Suche hat mich hierher gebracht, und nichts Erwähntes hat mein Problem gelöst. Schließlich stellte ich fest, dass es die Nummer 2 in meiner Liste war, also wollte ich dieses Wissen und die anderen Tricks, die ich im Laufe der Zeit gelernt habe, belassen.
AndyG

7
Eine Kombination aus # 2 und # 3 hat es für mich getan. Visual Studio beschwerte sich darüber, dass eine Reihe von (Nicht-Test-) Projekten in meiner Lösung vom Testerkennungsschritt ausgeschlossen wurden, weil sie für x86 erstellt wurden, aber das war in Ordnung.
Nate Barbettini

4
Ich stellte fest, dass meine Einstellungen alle korrekt waren und ein Neustart nicht funktionierte. Was das Problem für mich behoben hat, war einfach die Lösung zu entwickeln. Ich weiß, dass dies dumm erscheinen mag, aber es ist nicht offensichtlich, dass dies notwendig ist. Ich habe noch keine offiziellen Dokumente gesehen, die diesen Schritt erwähnt haben.
user1807768

6
Ich hatte das gleiche Problem in VS2015. # 2 hat das Problem für mich behoben.
mcolegro

2
Ich habe keine Ahnung, warum die Leute so viel Geld für ein Produkt bezahlen, das so oft ausfällt. Ich musste mein Projekt auf 2015 aktualisieren und 2 Mal # 3 ausführen, bevor es meinen Test entdeckte.
Matthew Hoggan

81

Wenn Sie NUnit verwenden, müssen Sie zuerst den NUnit-Adapter herunterladen.

Gehen Sie zu Extras → Erweiterungen und Updates… → Online → Suchen Sie nach "NUnit Test Adapter".


2
Ich verwende UnitTests von Microsoft. In diesem Fall muss wohl nichts installiert werden.
Miguelbgouveia

1
Das hat es für mich getan - sehr verpflichtet.
Matas Vaitkevicius

Das hat es für mich behoben. Vielen Dank.
jjthebig1

Upvoted wie das Problem behoben, aber es ist erforderlich, einen NUnit-Adapter zu haben, oder sollte Visual Stdio mit NUnit sofort funktionieren.
Owain Glyndŵr

Sie sind ein Gott, Sir.
Nox

61

Stellen Sie sicher, dass Ihre Testklasse publicso ist, dass sie gefunden werden kann. Und wenn Sie auf eine andere Klasse verweisen, stellen Sie dies sicher.

Manchmal, wenn Sie keine Asserts haben oder den Test nicht mit einem dekorieren [TestMethod], wird ein Test möglicherweise nicht erkannt.

2 weitere Dinge: 1) Asynchrone Unit-Tests wirken bestenfalls lustig und im schlimmsten Fall gar nicht. Schauen Sie sich diesen Artikel von Stephen Cleary an und halten Sie sich von dort , wenn es Sie interessiert.

2) Wenn Sie NUnit verwenden und auf dieselben Probleme [TestCase]stoßen, denken Sie daran, dass dies nicht für Nunit, sondern für Nunit gilt[TestMethod]

Nach alledem ist hier ein Artikel, den ich über das Code-Projekt gepostet habe, mit beiden MSTest& NUnit, falls Sie es ausprobieren und sicherstellen möchten, dass Sie nichts verpassen.


1
Alle meine Tests sind wie folgt: [TestClass] öffentliche Klasse ServicesUtilsTest {[TestMethod] public void Test1 () {Assert.IsTrue (True); }}
Miguelbgouveia

das ist nicht sehr klar. Fügen Sie es in einen Codeblock in Ihrer Frage ein, damit es verstanden werden kann :)
Noctis

Alle meine Tests beziehen sich auf Synchronisierungscode, und ich denke, mein Problem liegt nicht im Code für Komponententests, sondern eher in Visual Studio, wo die Tests manchmal nicht entdeckt werden.
Miguelbgouveia

Versuchen Sie stattdessen using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis

1
Ich verwende bereits Microsoft.VisualStudio.TestTools.UnitTesting. Dieser Namespace ist in der DLL Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
miguelbgouveia

28

Ich hatte das gleiche Problem, aber keine der anderen Lösungen funktionierte. Es stellt sich heraus, dass ich das NUnit 3-Framework mit dem 2-Adapter verwendet habe.

Wenn Sie NUnit 3 verwenden, gehen Sie zu Erweiterungen und Updates und installieren Sie den NUnit3-Testadapter.


Dies steht in der Beschreibung des Nuget-Pakets. Aber wenn Sie wie ich sind und nicht lesen, hoffe ich, dass dies hilft: "Dieses Paket enthält die NUnit 3.0-Framework-Assembly, auf die Ihre Tests verweisen. Sie müssen Version 3.0 der nunit- installieren. Konsolenprogramm oder ein Drittanbieter-Runner, der NUnit 3.0 unterstützt, um Tests auszuführen. Runner, die für die Verwendung mit NUnit 2.x vorgesehen sind, führen 3.0-Tests nicht korrekt aus. "
Frank

In meinem Fall wusste ich, dass es etwas mit dem NUnit3-Update zu tun hat, aber ein Satz meines Tests wurde bestanden und die anderen wurden nicht gesehen. Bei näherer Betrachtung gab es viele Ausnahmen in der Ausgabe, obwohl alle Tests bestanden wurden.
Rich Shealer

Dies war auch bei mir der Fall. Ich hatte nuget "update-package" ausgeführt, ohne zu bemerken, dass es von NUnit 2.x auf 3.x aktualisiert wurde.
Jens

Derzeit kann der NUnit 3.0-Testadapter nicht über NuGet gefunden werden (siehe die NUnit 3.0-Wiki ). Es kann jedoch immer noch als Erweiterung installiert werden.
Vauhochzett

1
Vielen Dank Frank. Es hat mein Problem gelöst. Jetzt kann ich die Unit-Testergebnisse im Konsolenfenster sehen :)
Santosh Kumar Patro 4.

12

Ich habe dieses Problem von Zeit zu Zeit. Für mich funktioniert es, Visual Studio herunterzufahren und in den Ordner zu wechseln:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

und löschen Sie es Inhalt.

Sobald Sie Visual Studio öffnen und Ihr Projekt erneut laden, sollte der Test Explorer Ihre Tests zurückgeben


Bei mir funktioniert das nicht. Ich verwende Visual Studio 2013 Express mit Update 5-Installation vor kurzem. Es erscheinen immer noch keine Unit-Tests.
Miguelbgouveia

Das war auch was für ein Arbeiter für mich. Arbeitete sogar ohne Neustart von Visual Studio. Stunden den Bach runter hatten endlich ein Ende.
Stephan Ryer

Dieses Verzeichnis existiert in VS2017 nicht mehr.
Noel Widmer

Vielen Dank, es funktioniert für mich für alle, für die dieser Ordner je nach Installation von Visual Studio eine andere Version haben kann, wie für mich%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry

12

XUnit-Benutzer stellen möglicherweise fest, dass im Fenster "Test Explorer" keine Tests mehr aufgelistet sind. Um Tests wieder auffindbar zu machen, versuchen Sie diesen wichtigen Tipp , der unten hervorgehoben ist.

Wenn Sie Probleme beim Erkennen oder Ausführen von Tests haben, sind Sie möglicherweise Opfer eines beschädigten Runner-Caches in Visual Studio. Um diesen Cache zu leeren, fahren Sie alle Instanzen von Visual Studio herunter und löschen Sie den Ordner% TEMP% \ VisualStudioTestExplorerExtensions. Stellen Sie außerdem sicher, dass Ihr Projekt nur mit einer einzelnen Version des Visual Studio Runner NuGet-Pakets (xunit.runner.visualstudio) verknüpft ist.

Geben Sie TEMP ein, um den Zielordner zu finden


Das hat bei mir nicht funktioniert. Der Test Explorer findet meinen Test einfach nicht und soweit ich das beurteilen kann, mache ich es nicht falsch und habe einige der Lösungen hier ohne Erfolg ausprobiert.
Skychan

Verwendung von MsTestV2 - dies war das einzige, was das Problem behoben hat
Nathan

5

Für zukünftige Googler hatte ich ein seltenes Szenario, das dies verursachte.

In meiner Basistestklasse hatte ich eine Eigenschaft namens TestContext. Dies störte die reservierte TestContext-Eigenschaft von MSTest und führte dazu, dass alle meine Tests bis auf einen (der nicht von der Basis geerbt wurde) vor VS / Resharper ausgeblendet wurden.


1
hab mich auch! Ich habe vergessen, die Testkontexteigenschaft zu machen public.
Flucht-llc

4

Für mich war es die Änderung der 'Lösungskonfigurationen' in Debug (anstelle von Release).


4

Mein Problem war, dass meine Unit-Test-Methode nicht ungültig war und Parameter empfing.


Von all den Dingen ... Das war mein Problem und das Parameter-Bit macht Sinn. Was würde das Testsystem schließlich wissen, um es zu bestehen? Die Lösung besteht darin, eine Testmethode zu erstellen, bei der Sie die zu testende Methode manuell aufrufen. Wenn Sie ein WebAPI-Projekt testen und ein Get with params haben, müssen Sie immer noch den passenden Get-Aufruf haben, der jedoch nicht im Explorer angezeigt wird.
MetalPhoenix

4

Ich habe festgestellt, dass Unit-Test-Methoden, die als markiert async voidsind, vom VS Test Explorer nicht erkannt werden. Dies scheint darauf zurückzuführen zu sein, dass VS nicht warten kann, bis ein Test abgeschlossen ist, und entscheiden kann, ob er erfolgreich ist oder nicht. Wenn Sie unbedingt eine Testmethode benötigen, um asynchron ausgeführt zu werden, geben Sie stattdessen eine Aufgabe zurück, wie z async Task. Ich fand, dass dies das Problem für mich behoben hat.


1
Dies beantwortet die obige Frage nicht, aber genau das ist das Problem, das ich zu lösen versuchte. Du hast also einen Unfall +1 :) Vielen Dank!
CF

3

Versuchen Sie, alle Projekte als MSIL (Beliebige CPU) anstelle von x86 / x64 zu erstellen. Hat seltsam für mich gearbeitet


Ich musste nur das Testprojekt mit einer beliebigen CPU
erstellen

1
Technisch gesehen wird C # / VB.NET immer in MSIL kompiliert. Die Projekteinstellungen "x86", "x64" oder "Beliebige CPU" (und in neueren Versionen "Bevorzugen 32-Bit") sind nur Flags oben in der EXE / DLL. Punkt steht jedoch immer noch; NUnit listet keine Tests auf, die nicht in die Ausführungsengine geladen werden können, da für die Ausführung eine bestimmte Architektur erforderlich ist.
Jonathan Gilbert

3

Während die Lösung von AndyG funktioniert, könnte eine dauerhaftere Lösung darin bestehen, die Umgebungsvariable PreferredToolArchitecture auf "x64" zu setzen, entweder durch:

So lassen Sie Visual Studio die native amd64-Toolchain verwenden

oder von:

  • Systemsteuerung | System und Sicherheit | System | Erweiterte Systemeinstellungen | Umgebungsvariablen
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64

2

Ich hatte das gleiche Problem und habe mich erneut daran erinnert (diese Situation ist schon einmal aufgetreten), dass die Auswahl von "Gemischte Plattform" im Menü der Lösungsplattform ebenso funktioniert wie die anderen Antworten.


Aber wo ist das Menü der Lösungsplattform? Ist das in Visual Studio? Ich verwende Visual Studio Express 2013 für Web und kann dieses Menü nicht finden.
Miguelbgouveia

2

Ich hatte es geschafft, meine als hinzuzufügen

public static void TestMethod1(){}

fing an zu arbeiten, sobald ich statische entfernt habe ....


2

Gehen Sie zum Nuget-Paketmanager und laden Sie den Nunit-Adapter wie folgt herunter. Geben Sie hier die Bildbeschreibung ein


1

Gehen Sie zum Projektmenü> Configuration Manager. Überprüfen Sie, ob Ihre Testprojektplattform mit dem Rest des Projekts übereinstimmt. Überprüfen Sie, ob sie erstellt und dann neu erstellt werden soll.


1
Ich habe keine Configuration Manager-Option in meinem Projektmenü. Ich kann nur die Option Projekteigenschaften finden. Ich bin sehr die Plattform des Unit-Test-Projekts und es ist das gleiche wie bei den anderen Projekten. Für mich funktioniert diese Lösung also nicht.
Miguelbgouveia

Definieren Sie „entspricht den Rest des Projektes“
amalgamate

1

Ich bin gerade darauf gestoßen und habe keinen ähnlichen Fall gesehen, der meinem ähnlich war.

In der .csprojDatei meines Testprojekts wurde der Datenschutz für NUnit-Referenzen auf Folgendes festgelegt False:

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

Nachdem ich mich darauf eingestellt hatte <Private>, Truefunktionierte es.


1

Sie müssen nur dieses Paket installieren:

NUnit TestAdapter NUnit TestAdapter


Ich wusste, dass die Verwendung eines anderen Unit-Test-Frameworks mein Problem lösen wird. Wenn ich jedoch weiterhin das Microsoft Unit Tests-Framework verwenden möchte, ist dies keine Lösung.
Miguelbgouveia


1

Ich hatte genau das gleiche Problem.

Dies lag an einer inkompatiblen Version von NUnit, die ich meinem Projekt (3.2.0) und dem von mir installierten Testadapter (2.0.0) hinzugefügt hatte.

Verwenden Sie zum Beheben "Extras> Erweiterungen und Updates" und suchen Sie nach dem NUnit3-Testadapter. Danach wurden meine Tests erkannt.

Prost


Ich benutze NUnit nicht.
Miguelbgouveia

1

Sagen wir einfach aus Gründen der Argumentation, dass Sie für Ihr Testprojekt die X64-Architektur verwenden müssen, damit die Abhängigkeiten ordnungsgemäß erstellt werden (wie in meinem Fall). Möglicherweise müssen Sie Ihre Standardprozessorarchitektur im Menü Test - Testeinstellungen ändern . Wenn Sie dies auf X64 setzen, konnte mein Test-Explorer meine Tests mit Microsoft.VisualStudio.TestTools.UnitTesting finden.


1

Es tut mir leid, dass ich zur langen Liste hinzugefügt habe, aber ich hatte ein ganz anderes Problem. Zunächst möchte ich erwähnen, dass ich mein Problem entdeckt habe, als ich im Test-Explorer auf "Alle ausführen" geklickt und dann das Build-Ausgabefenster in Visual Studio angesehen habe. Sie müssen es aktiv beobachten, da danach die Nachricht verschwindet.

Das Problem sieht so aus, als würde beim Scannen der Tests die DLL geladen und ihre Testtypen werden aufgelistet. Dadurch werden die Referenzen geladen. Wenn während dieses Vorgangs ein Fehler auftritt, werden die Tests nicht im Explorer angezeigt. Ich hatte zwei Probleme, die verhinderten, dass die Test-DLL erfolgreich geladen wurde:

  • In der Konfigurationsdatei war noch eine verbindliche Umleitung vorhanden (Weiterleitung zu einer Version mit niedrigerer Version NHiberate als im Testprojekt angegeben).
  • Eine widersprüchliche Assemblyreferenz (Referenzen der 2. Ebene können nicht geladen werden). AsmSpy ist übrigens ein großartiges Werkzeug, um nach diesen zu suchen.

Ich war mit dem gleichen Problem konfrontiert und hatte Schwierigkeiten herauszufinden, welche DLLs nicht geladen wurden ...
Amarnath Chatterjee

1

Wenn Sie eine Visual Studio-Lösung (in meinem Fall VS 2015 Community) aus einer Netzwerkfreigabe oder dem Verzeichnis Eigene Dateien laden , das Teil einer Freigabe ist, treten Probleme auf. Ich habe es gelöst, indem ich die Lösung und die zugrunde liegenden Projekte in einen lokalen Ordner verschoben habe.


1

Nachdem ich 2 Tage verbracht habe ... hat keines der oben genannten für mich funktioniert. Die einzige "Lösung" war: Gehen Sie zu Projekteigenschaften -> Registerkarte Erstellen. Klicken Sie dann in der rechten unteren Ecke des Fensters auf die Schaltfläche Erweitert. Ändern Sie "Debug Info:" in "full" und klicken Sie auf OK.

Hier sind die Screenshots: Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung einGeben Sie hier die Bildbeschreibung ein


0

Ich bin auf das gleiche Problem gestoßen. Und untersucht und festgestellt, dass die DLLs nicht erstellt und in den richtigen Ordner gelegt wurden. Sobald ich meine Konfiguration geändert hatte, erschienen sie. - die Build-Optionen für Projekte, welcher Ordner sollte verwendet werden? - die Build-Menüeintrag Build-Konfiguration, sollten sie überprüft werden.

das hat es für mich behoben.


Für mich wurden die DLLs für die Tests auch nicht erstellt, da Visual Studio keine definierten Tests findet. Ich verwende Visual Studio Express und habe keinen Menüeintrag zum Erstellen. Aber in meinem Konfigurationsmanager habe ich alle Build-Optionen überprüft. Ich denke, das ist kein Problem für meinen Fall.
Miguelbgouveia

@miguelbgouveia, es ist umgekehrt - VS erstellt DLLs und scannt diese dann nach Tests. Wenn Sie also keine Testprojekt-DLLs haben, werden Sie definitiv keine Tests finden.

0

Für Visual Studio 2013.5 hat das Löschen des Verzeichnisses \ TestResults in der Lösung geholfen. Visual Studio hat die MDF-Datei, in der die erkannten Tests gespeichert sind, beschädigt und somit die Erkennung von Komponententests verhindert.


1
Es ist in der Lösung Ihres Projekts. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihre Projektdatei -> Ordner im Datei-Explorer öffnen. Gehen Sie von dort aus ein Verzeichnis nach oben und löschen Sie das Verzeichnis / TestResults. Möglicherweise müssen Sie Visual Studio herunterfahren, um alles zu löschen. Das Verzeichnis wird beim nächsten Öffnen des Projekts neu erstellt.
MartijnK

0

Stellen Sie sicher, dass alle Projekte mit derselben Konfiguration ausgeführt werden. Wählen Sie unter Eigenschaften Ihres Projekts => Debug => Plattform in der Dropdown-Liste die entsprechende Plattform aus (für mich war es "Beliebige CPU"), wie bei Ihren anderen Projekten festgelegt.


0
  • Ich weiß, dass die Komponententests nicht gefunden werden, wenn die Lösung nicht erstellt wurde. Dies ist also ein Versuch (Erstellen der Lösung), aber diese Lösung ähnelt dem Helpdesk, der fragt, ob Ihr Computer angeschlossen ist ...
  • Nachdem eine saubere Neuerstellung das Problem für mich nicht behoben hatte, wurde es durch Ausführen eines vollständigen Batch-Builds behoben.

0

Hatte das gleiche Problem; Tests wurden plötzlich nicht mehr entdeckt.

Der Nunit-Testadapter war irgendwie deaktiviert worden. Durch Klicken auf Aktivieren im Erweiterungsmanager wurde dies für mich behoben.


0

Ich hatte das gleiche Problem, bis mir klar wurde, dass ich einen Fehler beim Ausschneiden / Einfügen gemacht und [Test Method]vor dem Test aufgehört habe.


Das passiert mir schon. Aber dabei ist das nicht der Fall.
Miguelbgouveia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.