Testmethode ist nicht schlüssig: Test wurde nicht ausgeführt. Error?


172

Ich habe eine Testklasse und unten habe ich einen Beispieltest aus der Testklasse veröffentlicht

namespace AdminPortal.Tests.Controller_Test.Customer
{
    [TestClass]
    public class BusinessUnitControllerTests
    {
        private IBusinessUnitRepository _mockBusinessUnitRepository;
        private BusinessUnitController _controller;

        [TestInitialize]
        public void TestInitialize()
        {
            _mockBusinessUnitRepository = MockRepository.GenerateMock<IBusinessUnitRepository>();
            _controller = new BusinessUnitController(_mockBusinessUnitRepository);
        }

        [TestCleanup]
        public void TestCleanup()
        {
            _mockBusinessUnitRepository = null;

            _controller.Dispose();
            _controller = null;

        }

        #region Index Action Tests
        [TestMethod]
        public void Index_Action_Calls_GetAllBusinessUnit()
        {
            _mockBusinessUnitRepository.Stub(x => x.GetAllBusinessUnit());

            _controller.Index();

            _mockBusinessUnitRepository.AssertWasCalled(x=>x.GetAllBusinessUnit());
        }
    }
}

Wenn ich das Projekt starte, erhalte ich folgenden Bildschirm Geben Sie hier die Bildbeschreibung ein

Ich habe die Referenzen überprüft und das Testprojekt hat den Verweis auf das Hauptprojekt. Irgendeine Idee, warum der Test nicht läuft oder sagt, dass sie nicht schlüssig waren?

Bearbeiten 1:

Ich sah einen Beitrag hier und änderte Einstellung meines Test-Standardprozessorarchitektur X64 , aber es funktioniert immer noch nicht.


3
Es ist ein bekanntes Problem in ReSharper. Hier gibt es einige mögliche Lösungen: stackoverflow.com/questions/12191352/… .
Chris Mantle

3
Haben Sie eine Reinigung und einen Umbau durchgeführt? Ich erinnere mich, dass VS2010 etwas seltsam ist, wenn Verweise auf Assemblys verloren gehen, nachdem Sie sie aktualisiert und neu erstellt haben.
Mark Walsh

@ ChrisMantle Ich habe es ausgecheckt und meine Standardprozessorarchitektur geändert, aber es funktioniert immer noch nicht
Cybercop

@ MarkWalsh Ich benutze VS2012. Ich habe die Lösung immer noch gereinigt und neu aufgebaut, wie Sie sagten, aber sie funktioniert immer noch nicht
Cybercop

9
Diese Frage wird
Mücke

Antworten:


133

Nur für den Fall, dass keine der oben genannten Optionen für jemanden funktioniert hat, habe ich meine Instanz dieses Fehlers behoben, indem ich einen beschädigten Eintrag in meiner App.Config aufgrund eines fehlenden Nuget-Pakets im Testprojekt festgestellt habe.


5
Gleiches Problem hier. Es wäre schön, wenn R # den Fehler in die Luft sprudeln lassen würde (Fehler beim Initialisieren des Konfigurationssystems), sodass es offensichtlich wäre, warum die Tests nicht ausgeführt wurden.
Geoffrey Hudik

5
Vielen Dank, für mich habe ich die Apps versehentlich auf die Konfigurationen gelegt, sie an die richtige Position gebracht und es funktioniert.
anIBMer

3
Ich habe specflow durch nuget hinzugefügt und einen Eintrag in App.config eingefügt. Das hat den ganzen Ärger verursacht. Ich habe eine neue App.config erstellt und die Referenz erneut hinzugefügt, und sie wurde behoben. Danke für die Information.
Vinee

Ich kann bestätigen, dass dies fast zwei Jahre nach der ersten Veröffentlichung dieses Beitrags immer noch eine praktikable Lösung zu sein scheint (ich verwende VS 2015 und ReSharper 9.2).
Steven D.

2
Bingo! Danke Chris. In meinem Fall war es ein log4net-Abschnitt ohne einen Namen für den Bearbeitungsabschnitt in <configSections>.
Datps

47

Für mich war es ziemlich frustrierend, aber ich habe zumindest eine Lösung für meinen Fall gefunden:

Wenn Ihre Testmethode asynchron ist, kann sie nicht ungültig sein. Es MUSS Aufgabe zurückgeben.

Hoffe es hilft jemandem :)


37

Ich hatte das gleiche Problem mit Resharper und habe diesen Fehler durch Ändern einer Option behoben:

Resharper => Optionen => Tools => Unit Testing

Ich musste nur die Option "Shadow-Copy-Assemblys werden getestet" deaktivieren.


2
Dies hat es für mich geklärt, nachdem ich mir eine Menge anderer Korrekturen angesehen hatte. Ich benutze VS 2013 und R # v8.1
Spikeh

10
Hat bei mir nicht funktioniert, ich benutze VS2015 mit Reshaper 10.
Nemeas

Dies brachte es mir, mit VS2017 und Resharper Ultimate 2017.2.2 an einem NETCore-Testprojekt zu arbeiten.
Tasker

Hat für mich gearbeitet und ich muss jetzt keinen Build für die Tests löschen. Danke Elias.
PhoenixPan

22

Es war ein Resharper-Problem. In den Optionen Resharper-> Tools-> MSTEST habe ich das Kontrollkästchen Legacy Runner verwenden deaktiviert und jetzt funktioniert es.


61
Ich habe diese Option nicht unter Tools-> Unit Testing-> MsTest. (Resharper 9.2.)
cederlof

Ich habe auch keine solche Option in R # 2017.2.
Realsonic

Für mich war die Option unter Tools-> Unit Testing-> MsTest und das Deaktivieren half.
Marcel

15

Ich hatte dieses Problem und es stellte sich heraus, dass es das gleiche war wie dieses Problem hier . Diese Antwort löste das Problem für mich .

  1. Deaktivieren Sie "Nur Startprojekte und Abhängigkeiten von Ausführen erstellen" (Optionen -> Projekte und Lösungen -> Erstellen und Ausführen).
  2. Stellen Sie in Configuration Manager sicher, dass sowohl im Startprojekt als auch im Testprojekt "Erstellen" aktiviert ist.

Das zweite Mal, als ich auf dieses Problem stieß, lag ein kaufmännisches Und im Dateipfad zu dem Projekt, in dem sich die Tests befinden. Es funktioniert gut mit dem Testläufer von ReSharper, aber nicht mit dem von dotCover. Entfernen Sie das kaufmännische Und aus dem Dateipfad.

Dies ist ein bestätigter Fehler mit dotCover.


1
Hat für mich gearbeitet. VS2017 mit ReSharper 2017.1.3 :-)
Lars Holdgaard

12

Für mich hat das einfache Reinigen und Wiederherstellen der Lösung das Problem behoben.


Ich hatte (versehentlich) die Änderungen an der Projektdatei beim Ändern des Zweigs in Git zurückgesetzt. Als ich versuchte, den Test durch Klicken mit der rechten Maustaste in die Klasse auszuführen (das Codefenster war noch geöffnet), wurde er nicht ausgeführt, da er nicht Teil der Lösung war.
Mortb

12

Für mich war das Problem , eine korrupte NUnit / ReSharper Einstellungen XML-Datei (aufgrund eines unerwarteten Stromausfall).

Um den Fehler zu identifizieren, habe ich Visual Studio mit diesem Befehl gestartet :

devenv.exe /ReSharper.LogFile C:\temp\resharper.log /ReSharper.LogLevel Verbose

Die Prüfung der Datei ergab die folgende Ausnahme:

09:45:31.894 |W| UnitTestLaunch                | System.ApplicationException: Error loading settings file
System.ApplicationException: Error loading settings file ---> System.Xml.XmlException: Root element is missing.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.Load(String filename)
   at NUnit.Engine.Internal.SettingsStore.LoadSettings()
   --- End of inner exception stack trace ---
   at NUnit.Engine.Internal.SettingsStore.LoadSettings()
   at NUnit.Engine.Services.SettingsService.StartService()
   at NUnit.Engine.Services.ServiceManager.StartServices()
   at NUnit.Engine.TestEngine.Initialize()
   at NUnit.Engine.TestEngine.GetRunner(TestPackage package)
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.<>c__DisplayClass1.<RunTests>b__0()
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.WithExtensiveErrorHandling(IRemoteTaskServer server, Action action)

Beachten Sie, dass dies NICHT die app.config des Testprojekts ist!

Ein kurzes Googeln identifizierte die folgende Datei als Schuldigen:

%LOCALAPPDATA%\NUnit\Nunit30Settings.xml

Es existierte, war aber leer. Durch Löschen und Neustarten von Visual Studio wurde das Problem behoben.

(Verwenden von Visual Studio Professional 2017 v15.3.5 und ReSharper 2017.2.1).


12

Ich habe dieses Problem in vs 2017 Update 3 mit Resharper Ultimate 2017.2 gesehen

Neustart vs oder Neustart der Maschine kann nicht helfen.

Ich habe das Problem behoben, indem ich den Cache wie folgt geleert habe:

    Resharper ->options-> Environment ->click the button 'Clear caches'

Aktualisieren:

In der oberen rechten Ecke des Testfensters befindet sich eine Schaltfläche "Fehler" (ich finde in Resharper 2018).

Wenn Sie auf die Fehlerschaltfläche klicken, wird eine Fehlermeldung angezeigt, die zur Behebung des Problems beitragen kann.

Führen Sie Visual Studio im Protokollmodus aus, um die Ursache des Problems zu ermitteln. Führen Sie in vs 2017 den folgenden Befehl aus:

      devenv /ReSharper.LogFile C:\temp\log\test_log.txt /ReSharper.LogLevel Verbose

Führen Sie den Test aus.

Überprüfen Sie die Protokolldatei test_log.txt und suchen Sie in der Datei nach "Fehler".

Die Protokolldatei ist eine große Hilfe, um den Fehler zu finden, den Sie beheben können, oder Sie können das Problem mit der Protokolldatei an das technische Support-Team von Resharper senden .


7

Ich habe gerade auch dieses Problem behoben. Keine der Lösungen in diesem Thread funktionierte jedoch. Folgendes habe ich getan ...

Da R # keine Details darüber gab, warum die Dinge fehlschlugen, entschied ich mich, den eingebauten VS2013-Testläufer zu testen. Es zeigte genau das gleiche Verhalten, bei dem keiner der Tests ausgeführt wurde. Als ich jedoch in das Ausgabefenster schaute, hatte ich endlich eine Fehlermeldung:

Beim Aufrufen von executor 'executor: // mstestadapter / v1' ist eine Ausnahme aufgetreten: Objektreferenz nicht auf eine Instanz eines Objekts festgelegt.

Dies führte mich zu einem anderen Thread über SO mit einer Lösung. Glauben Sie mir, ich hätte NIE erraten, worum es ging.

Ich habe kürzlich beim Erstellen eines NuGet-Pakets einige Änderungen an der Datei AssemblyInfo.cs vorgenommen. Eine der Änderungen, einschließlich der Angabe eines Assembler-Kulturwerts von "en".

Ich habe das geändert:

[assembly: AssemblyCulture("")] 

dazu:

[assembly: AssemblyCulture("en")]`. 

Das war's! Das hat meine Unit-Tests unerklärlicherweise gebrochen. Ich verstehe immer noch nicht warum. Aber zumindest funktionieren die Dinge wieder. Nachdem ich diese Änderung rückgängig gemacht hatte (dh die Kultur auf "" zurückgesetzt hatte), wurden meine Tests erneut ausgeführt.

Hoffe das hilft jemandem da draußen.


1
Ich habe die Montagekultur geändert und R # hat die Tests gestoppt.
Valentine Zakharenko

Danke! Das Überprüfen des Ausgabefensters ergab mein Problem, die Klasse war nicht öffentlich!
Jony Feldman

7

In meinem Fall waren die [Test]Methoden gerecht private. Schande


1
Seltsam, ReSharper hat sich nur bei mir beschwert, dass meine [Test] -Methoden privat waren. Muss eine neue Funktion sein.
Kevin B Burns

7

Mein Problem war, dass ich NUnit nur mit Nuget installiert hatte. Ich hatte NUnit3TestAdapter nicht installiert, was auch erforderlich war.

Install-Package NUnit3TestAdapter

Dies ist eines dieser frustrierenden Probleme, die Ihnen wenig Aufschluss über das eigentliche Problem geben!
Ben Power

6

In meinem Fall war es ein Fehler, den ich beim Kopieren des Verbindungsstrings in die app.config gemacht habe. Ich hatte ihn in das configSections-Tag eingefügt!

Es hat eine Weile gedauert, bis mir klar wurde, dass ... danke VS Intellisense ... oder war es schärfer?


in meinem Fall war es das Ergebnis einer ungültigen Änderung in der Konfigurationsdatei
evgenyl

Mein Problem wurde durch eine schlechte Git-Konfliktlösung verursacht, die
Kopfänderungsinformationen

Fast das gleiche passierte mir, ich hatte einem redundanten appSettings-Abschnitt eine Verbindungszeichenfolge hinzugefügt, als ich den redundanten appSettings-Abschnitt entfernte und die Verbindungszeichenfolge in die ursprünglichen appSettings verschob, die funktionierten.
Sirar Salih

Die Antwort über beschädigte app.config ist die gleiche wie die erste stackoverflow.com/a/21386881/52277
Michael Freidgeim

5

Ich hatte ein ähnliches Problem. VS 2010, c # CLR 2 Nunit 2.5.7, erstellen Sie einfach eine> saubere Lösung von VS, um dieses Problem zu beheben


5

In meinem Fall habe ich eine asynchrone Testmethode erstellt, die zurückgegeben wurde void. Rückgabe von Taskstatt voidgelöst das Problem.


4

Haben Sie kürzlich eine DLL-Abhängigkeit hinzugefügt? ... wie ich

Ich bin gerade auf das gleiche Problem gestoßen und es war sehr ärgerlich, keinen Hinweis im Testausgabefenster oder anderswo praktisch zu bekommen.

Die Ursache war äußerst dumm: Ich habe gerade am Tag vor der Abhängigkeit eine zusätzliche externe DLL in einem Unterprojekt hinzugefügt, und die Hauptprojekt-App wurde nach der Änderung tatsächlich korrekt erstellt und ausgeführt. Aber meine Unit-Tests befinden sich in einem Schwesterprojekt zur Haupt-App und hatten daher auch die Abhängigkeit von diesem geänderten Unterprojekt, in dem die DLL aufgerufen wurde ... dennoch ist der Laufzeitspeicherort des Testprojekts nicht der der Haupt-App! Das Ändern des Builds zum Kopieren der fehlenden DLL in das Testlaufzeitverzeichnis hat das Problem behoben.


4

Ich verwende VS2013, ReSharper 9.1 mit MSpec-Erweiterung von ReSharper und Moq. Ich habe den gleichen "nicht schlüssigen" Fehler erlebt.

Es stellte sich heraus, dass einer meiner Mocks von Moq nicht initialisiert, sondern nur deklariert wurde. Alle initialisierten alle Tests wurden erneut ausgeführt.


4

In meinem Fall habe ich diesen Fehler aufgrund des 'Release'-Modus erhalten, in dem die Erstellung des UnitTests-Projekts einfach deaktiviert wurde. Das Zurückschalten in den Debug-Modus hat das Problem behoben.

Es ist wirklich überraschend, dass ReSharper nichts sagen kann, falls es die UnitTests-Bibliothek überhaupt nicht finden kann. Im Ernst, es ist eine Schande;)

Hoffe es wird jemandem helfen


4

In meinem Fall alle Tests in einigen Testprojekten innerhalb einer Lösung nicht ausgeführt, nachdem ich neue Projekte hinzugefügt hatte. Verwenden von VS 2017 mit ReSharper 2017.1.2 hier.

Stellen Sie zunächst sicher, dass Sie keine Zeit verschwenden, vorausgesetzt, Ihr Problem hängt mit ReSharper zusammen. Es ist leicht anzunehmen, dass mit ReSharper etwas nicht stimmt, wenn Sie die Unit-Test-Funktionen einschließlich Unit Test Explorer verwenden . Öffnen Sie den Test Explorer von Visual Studio unter dem Test - Menü und versuchen Sie Run All “. Der zusätzliche Vorteil dabei ist , dass das Ausgabefenster eine Fehlermeldung angezeigt, die Sie in die richtige Richtung weisen könnte. Wenn Sie feststellen , dass der gleiche Satz von Test Wenn sie nicht ausgeführt werden, kann davon ausgegangen werden, dass das Problem bei Visual Studio und nicht bei ReSharper liegt.

Am Ende habe ich eine der Active Solution-Plattformen , Any CPU , in Configuration Manager gelöscht und erneut hinzugefügt . Auf diese Weise wurden nach dem Speichern meiner Änderungen und dem erneuten Öffnen der Lösung alle Tests erneut ausgeführt.

Ich glaube, es gab einen unerwarteten Konfigurationseintrag in der Lösungsdatei, als ich neue Projekte hinzufügte und durch die Neuerstellung einer der Plattformen selbst korrigierte. Ich habe versucht, mich zu unterscheiden, aber es war schwierig zu sagen, was sich geändert hatte, um das Problem zu verursachen.


In meinem Fall hatte ich einen dummen Tippfehler in app.config <AppConfig> anstelle von <AppSettings>. Ich liebe ReSharper, aber sie müssen WIRKLICH an ihren Fehlermeldungen arbeiten!
MichaelMilom

4

Für diejenigen, die dieses Problem für mein Testprojekt .NET Core 2.0in der Visual Studio 2017 Community (v15.3 3). Ich hatte auch diesen Fehler mit JetBrains ReSharper Ultimate 2017.2 Build 109.0.20170824.131346- es gibt einen Fehler, den ich gepostet habe.

JetBrains empfahl, ein neues Testprojekt von Grund auf neu zu erstellen, um es zu reproduzieren. Als ich das tat und die Tests in Ordnung waren, fand ich den Grund für das Problem:

  • Entfernen Sie dies aus Ihrer *.csprojDatei:
  • Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}""

Als ich das tat, fingen die Tests an, gut zu funktionieren.


Dmitry, danke, es hat mir geholfen. Können Sie erklären, was dieser Service ist?
Vladimir Melekh

@ VladimirMelekh überprüfen Sie diese github.com/Microsoft/vstest/issues/472
Dmitry Pavlov

3

Ich verwende VS2010, NUnit 2.6.3 (obwohl ReSharper intern sagt, dass es 2.6.2 verwendet?), ReSharper 7.7.1 und NCrunch 2.5.0.12 und stieß auf dasselbe "... Test ist nicht schlüssig ..." mit NUnit, aber NCrunch sagte, alles sei in Ordnung. Für den größten Teil des heutigen Tages waren sich NUnit & NCrunch synchron darüber einig, welche Tests zufrieden waren und welche umgestaltet werden mussten. Dann passierte etwas, das ich immer noch nicht verstehe, und für eine Weile sagte NCrunch, ich hätte fehlgeschlagene Tests (aber das Durchlaufen zeigte dies pass), entschied dann, dass sie alle funktionierten, und NUnit begann sich über alle meine Tests zu beschweren, mit Ausnahme eines mit der gleichen Meldung "..test ist nicht schlüssig ...", die ich erneut einzeln durchlaufen konnte, obwohl NUnit fortfuhr um es als "nicht schlüssig" zu zeigen).

Ich habe einige der oben genannten Vorschläge ohne Erfolg ausprobiert und schließlich VS2010 geschlossen und die Lösung erneut geöffnet. Voila, jetzt sind alle meine Tests wieder glücklich und NCrunch & NUnit melden wieder die gleichen Ergebnisse. Leider habe ich keine Ahnung, was sich geändert hat, damit sie nicht mehr synchron sind, aber das Schließen und erneute Öffnen von VS2010 scheint das Problem behoben zu haben.

Vielleicht stößt jemand anderes darauf und kann diese einfache (wenn auch letztendlich unbefriedigende, da Sie nicht wissen, was die eigentliche Lösung ist) Lösung verwenden.


3

Ich hatte das gleiche Problem. Der Schuldige war eine externe Referenz, die nicht mit meinen Projekterstellungseinstellungen kompatibel war. Zum Auflösen habe ich mit der rechten Maustaste auf das Projekt-> Eigenschaften-> Build-> Plattformziel-> Wechsel von einer beliebigen CPU zu x86 geklickt.

Die spezielle * .dll, mit der ich gearbeitet habe, war System.Data.SQLite. Diese bestimmte * .dll ist für den 32-Bit-Betrieb fest codiert. Die Einstellung "Beliebige CPU" hat versucht, sie als 64-Bit zu laden.


Die Nichtübereinstimmung der Plattformziele kann auch bei Verweisen auf andere Projekte innerhalb derselben Lösung auftreten.
Chaquotay

3

Meine Lösung:

NUnit 3.2.0 hat einige Probleme mit Resharper - Downgrade auf 2.6.4:

update-package nunit -version 2.6.4

3

In meinem Fall war meine Testmethode privat. Ich habe sie in öffentlich geändert und sie hat funktioniert.


3

Verursacht durch fehlende (nicht beschädigte) App.Config-Datei. Durch Hinzufügen einer neuen Datei (Hinzufügen -> Neues Element ... -> Anwendungskonfigurationsdatei) wurde das Problem behoben.


3

Ich hatte das gleiche Problem. Es hing mit der Kompatibilitätsversion zwischen NUnit 3.5 und Resharper 9.2 zusammen, da es durch ein Downgrade von NUnit 3.5 auf 2.6.4 behoben wurde. Es hat bei mir funktioniert. Viel Glück.


Ich hatte eine Testassembly gegen 3.6.1 kompiliert und meine Haupttestassembly wurde gegen 3.7.1 kompiliert. Auf 3.6.1 herabgestuft und jetzt ist alles gut.
Tom

Dies war bei ReSharper 2017.3.2 und NUnit 3.11 der Fall. Siehe Kommentar für nunit github.com/nunit/nunit/issues/3086#issuecomment-466988760
Puterdo Borato

3

Wenn Sie verwenden xUnit, habe ich das Problem bei der Installation des xunit.running.visualstudioPakets behoben . (verwendet derzeit xUnit 2.3.1und VS17 Enterprise 15.3.5)


3

Ich hatte das gleiche Problem, einen Test mit dem NUnit-Framework auszuführen. "Nicht schlüssig: Test nicht ausgeführt" Visual Studio 2017 15.5.6

ReSharper Ultimate 2017.3.3 Build 111.0.20180302.65130

Gelöst Hinzufügen der Projektabhängigkeit zu Microsoft.NET.Test.Sdk


Hat in meinem Fall nicht geholfen
Dmitry Avtonomov

2

Für diejenigen, die in Eile zur Testausführung sind, musste ich den VS 2017 Test Explorer verwenden, um Tests auszuführen.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


2

Dieser Fehler trat bei Visual Studio 2017 und Resharper Version 2018.2.3 auf, der Fix gilt jedoch für Visual Studio 2019-Versionen von.

Um die Tests in Resharper zum Laufen zu bringen, wurde lediglich die Aktualisierung auf die neueste Version von Resharper (2019.2.1) zum Zeitpunkt des Schreibens durchgeführt.


1

Ich hatte genau das gleiche Problem und nichts half.

Schließlich sah ich, dass meine Namespaces des Unit-Projekts und des Unit-Test-Projekts nicht übereinstimmten.

Der Namespace meines Unit-Projekts ist unit.project und das Testprojekt wurde unit.project.tests genannt, aber der Standard-Namespace des Tests war der gleiche wie der der Unit, beide waren unit.project.

Sobald ich die Namespaces so aktualisiert habe, dass sie unterschiedlich sind (ein Namespace für jedes Projekt), hat alles funktioniert!


Ja, ich hatte das gleiche Problem. Die Idee könnte sein, das Testprojekt und das Zielprojekt für einen einfachen Zugriff identisch zu machen, aber es wird mit dem Testläufer verschraubt und erzeugt dieses Problem aus dem OP.
Atconway
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.