visual-studio-2010 - tests - visual studio unit test c++



VS 2010 Test Runner error "Der Agentenprozess wurde gestoppt, während der Test ausgeführt wurde." (12)

In Visual Studio 2010 habe ich eine Reihe von Komponententests. Wenn ich mehrere Tests gleichzeitig mit Testlisten ausfühle, erhalte ich manchmal den folgenden Fehler für einen oder mehrere der Tests:

Der Agentenprozess wurde gestoppt, während der Test ausgeführt wurde.

Es ist nie der gleiche Test fehlgeschlagen, und wenn ich versuche, den Test erneut auszuführen, ist es erfolgreich.

Ich habe diesen Fehlerbericht bei Connect gefunden , was das gleiche Problem zu sein scheint, aber es bietet keine Lösung.

Hat jemand anderes dieses Verhalten gesehen? Wie kann ich es vermeiden?

Bearbeiten

Ich habe immer noch diesen Fehler, und so sind viele meiner Kollegen auf dem gleichen Software / Hardware-Setup. Ich habe die Antworten bisher ausgewertet, aber sie lösen das Problem nicht. Ich beginne ein Kopfgeld für eine Lösung dieses Problems.

https://src-bin.com


Answer #1

Da dieser Fehler viele verschiedene Ursachen haben kann, möchte ich einen weiteren zur Vollständigkeit dieses Threads hinzufügen.

Wenn alle Ihre Tests wie vom OP beschrieben abgebrochen werden, liegt möglicherweise eine falsche Projektkonfiguration vor. In meinem Fall wurde das Zielframework auf .NET Framework 3.5 festgelegt. Wenn Sie es auf der Seite mit den Projekteigenschaften (Registerkarte Anwendung ) auf eine höhere Version setzten, wurde das Problem behoben.


Answer #2

Das Problem kann auch durch eine Ausnahme oder in Constructor einer TestClass ausgelöst werden.


Answer #3

Diese Nachricht wird normalerweise generiert, wenn der Testprozess abstürzt und wenn eine unbehandelte Ausnahme in einem Hintergrundthread, ein Stapelüberlauf oder ein expliziter Aufruf von Process.GetCurrentProcess().Kill() oder Environment.Exit Process.GetCurrentProcess().Kill() . Eine andere mögliche Ursache ist eine Zugriffsverletzung in nicht verwaltetem Code.

Etwas, das niemand erwähnt hat, ist, dass möglicherweise zusätzliche Informationen im Ereignisprotokoll vorhanden sind. Normalerweise erhalten Sie nicht viele Informationen darüber, warum der Test in den Ergebnissen abgestürzt ist. Im Falle einer nicht behandelten Ausnahme in einem Hintergrundthread schreibt das Testframework jedoch Details in das Anwendungsereignisprotokoll mit der Quelle VSTTExecution. Wenn keine Informationen in das Ereignisprotokoll geschrieben werden, ist dies wahrscheinlich einer der anderen oben aufgeführten Ursachen.


Answer #4

Dieser Fehler wurde auch von einem Finalizer verursacht.
Der Finalizer hat tatsächlich einen DB-Code aufgerufen, der nicht verspottet wurde. Ich brauchte eine Weile, um es zu finden, da es sich nicht um eine Klasse handelte, die ich geschrieben hatte, und der Hinweis darauf war ein paar Stunden tiefgründig.


Answer #5

Ich habe gerade das ähnliche Problem erlebt: Einige Tests scheitern und sie unterscheiden sich in verschiedenen Testläufen. Ich weiß nicht genau, warum das passiert, aber es begann, als ich einen Finalizer zu einem meiner Kurse hinzufügte. Wenn ich den Finalizer deaktiviere - das Problem verschwindet. Wenn ich den Finalizer einschalte, kommt das Problem zurück.

Im Moment weiß ich nicht, wie ich das überwinden soll.


Answer #6

Ich habe try / catch-Blöcke zum Deskriptor ~ ClassName () {} hinzugefügt, die in jeder Klasse definiert waren, die an meinen Tests beteiligt war. Das hat das Problem für mich behoben.

~MyClass()
{
    try
    {
        // Some Code
    }
    catch (Exception e)
    {
        // Log the exception so it's not totally hidden
        // Console.WriteLine(e.ToString());
    }
}

Answer #7

Ich hatte dieses Ereignis gelegentlich, und der Schuldige entpuppt sich fast immer als tätschelnd.

Seltsamerweise würden alle Tests auf den Entwicklungsmaschinen funktionieren und dann zufällig auf den Build-Servern ausfallen.

Bei näherer Betrachtung stellte sich heraus, dass, obwohl die Tests als an den Dev-Boxen weitergegeben aufgelistet wurden, Ausnahmen gemacht wurden. Die Ausnahmen wurden auf einen separaten Thread geworfen, der nicht als Fehler erkannt wurde.

Die Ausnahmedetails wurden für die Testablaufverfolgung protokolliert, sodass wir feststellen konnten, welche Codes / Tests geändert werden mussten.

Hoffe, das hilft jemandem.


Answer #8

Ich hatte dieses Problem und es stellte sich heraus, dass es sich um ein Problem in meinem Code handelte, das das Test Framework nicht richtig erfasst hat. Ein kleines zufälliges Refactoring hatte mich mit diesem Code verlassen:

public void GetThingy()
{
    this.GetThingy();
}

Dies ist natürlich eine unendliche Rekursion und verursachte eine Exception (ich denke). Was dies verursachte, war die gefürchtete: "Der Agent-Prozess wurde gestoppt, während der Test lief."

Eine schnelle Code-Inspektion zeigte mir das Problem, und meine Tests laufen jetzt gut. Hoffe, das hilft - könnte es sich lohnen, den Code auf Probleme zu untersuchen, oder vielleicht ein bisschen in eine Konsolen-App zu extrahieren und zu überprüfen, ob es dort richtig funktioniert.


Answer #9

Ich stieß auf das gleiche Problem und löste es beim Entfernen

Environment.Exit(0);

Daher bin ich mir ziemlich sicher, dass dieser Fehler auftritt, während der Test oder die zu testende Methode den ausführenden Prozess beendet.


Answer #10

In meinem Fall hatte ich einige Unit-Tests für einen WCF-Service. Dieser WCF-Dienst startete 2 Timer.
Diese Timer verursachten Nebenwirkungen.
-> Ich deaktiviere diese Timer standardmäßig und alles ist in Ordnung!

BTW: Ich benutze WCFMock , um den WCF-Dienst zu fälschen, also habe ich "echte" WCFMock um meinen WCF-Dienst


Answer #11

Um herauszufinden, wo die Ausnahme ausgelöst wurde, klicken Sie auf den Hyperlink "Testlauffehler" neben dem Ausrufezeichen im Fenster Testergebnisse. Ein Fenster mit dem Stack-Trace wird geöffnet.

Dies hilft viel, den Fehler aufzuspüren!


Answer #12

Vielen Dank für das Posten der Frage. Ich bin gerade auf dieses Problem gestoßen und habe eine Ursache herausgefunden, in die Sie hineingeraten könnten.

Möglicherweise ist eine asynchrone Ausnahme aufgetreten

Während meiner Testkonfiguration erstelle ich ein Objekt, das einen Arbeitsthread im Thread-Pool in die Warteschlange stellt. Wenn ich schnell genug durch Debugging laufe, vergeht mein Code.

Wenn der Worker-Thread gestartet wird und einen Fehler hat, BEVOR der Test-Setup abgeschlossen ist, dann erhalte ich das Ergebnis von Abgebrochen ohne Argumentation.

Wenn der Worker-Thread gestartet wird und nach dem Start des Tests ein Fehler auftritt, wird Folgendes angezeigt: Fehler - Der Agent-Prozess wurde angehalten, während der Test ausgeführt wurde.

Wichtig zu beachten: Dies ist eine Komponente, die ich in mehreren meiner Tests verwende. Wenn das Test-Framework zu viele dieser Fehler findet, bricht es den Rest der Tests ab.

Hoffe das hilft