10 Stimmen

Warum erhalte ich ein unterschiedliches Verhalten, wenn ich auf die Schaltfläche "Alle Tests ausführen" von Resharper klicke, im Vergleich zur Verwendung des Tastenkürzels Befehl?

Der Code, den ich im Unit-Test verwende, bezieht sich auf einen App-Einstellung im app.config-Datei. Um dies zu berücksichtigen, habe ich eine app.config-Datei zu meinem Unit-Test-Projekt hinzugefügt. Wenn ich auf das Symbol "Alle Tests ausführen" im Fenster der Unit-Test-Sitzungen klicke, bestehen alle meine Tests.

Ich habe den Befehl "ReSharper.ReSharper_UnitTest_RunSolution" auf Strg+Shift+Alt+U gemappt. Wenn ich die Tests durch Drücken dieser Kombination ausführe, laufen alle Tests, aber sie können die App-Einstellung nicht finden, die als Null erscheint.

Ich gehe davon aus, dass dies bedeutet, dass der Klick auf die Schaltfläche im Kontext des Testprojekts ausgeführt wird, während der Befehl dies nicht tut, aber ich kann nicht ganz herausfinden, was der Befehl tut.

Habe ich den falschen Befehl zugewiesen?

EDIT 1: Ich habe auch versucht, die Tastenkombination Alt-RUN (Resharper > Unit Tests > Alle ausführen) zu verwenden, sowie manuell auf die Menüs zu klicken, und festgestellt, dass dies auch dazu führt, dass alle Unit-Tests die App-Einstellung nicht finden und daher fehlschlagen. Durch Klicken auf das Symbol Alle Tests ausführen in den Unit-Test-Sitzungen (die doppelte grüne Pfeil) funktioniert weiterhin einwandfrei.

EDIT 2: Mir wurde klar, dass ich wahrscheinlich eine separate Klasse mocken sollte, die appsettings aus der Konfigurationsdatei abruft, also mache ich das jetzt. Jetzt gibt es also keine Abhängigkeit von der Konfigurationsdatei beim Unit-Testen mehr.

3voto

citizenmatt Punkte 17544

Hier passieren zwei Dinge. Erstens führt das Symbol "Alle Tests ausführen" im Sitzungsfenster alle Tests in der Sitzung aus, während der Menüpunkt "Alle Tests ausführen" alle Tests in der Lösung ausführt. Ein bisschen verwirrend, dass sie den gleichen Namen haben, aber es ergibt Sinn, wenn man den Kontext betrachtet. Deshalb liefern sie unterschiedliche Ergebnisse.

Zweitens wird beim Ausführen aller Tests in einer Lösung möglicherweise die App-Einstellung nicht gefunden. Dies liegt an einer Optimierung, die der Testrunner vornimmt, um alle Tests im selben AppDomain auszuführen. Dies vermeidet den Overhead, für jede Assembly ein neues AppDomain zu erstellen, hat jedoch den Nachteil, dass nur eine app.config für alle Assemblys verwendet wird. Wenn die falsche ausgewählt wird, gehen deine App-Einstellungen verloren.

Dies kann deaktiviert werden, indem man bei ReSharper » Optionen » Unit Testing » "Für jede Assembly mit Tests ein separates AppDomain verwenden" das Häkchen entfernt. Idealerweise sollte dies deaktiviert werden, wenn irgendein Projekt eine app.config hat - ich habe eine Feature-Anfrage hinzugefügt, für die du abstimmen und nachverfolgen kannst: https://youtrack.jetbrains.com/issue/RSRP-428958

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X