Ncrunch alle testpass zuerst ausgeführt, schlägt aber nach dem Codewechsel fehl, und wenn der Ausführen der Taste gedrückt wird

StackOverflow https://stackoverflow.com//questions/12685690

  •  12-12-2019
  •  | 
  •  

Frage

Ich fahre NRYRCRYCH in einer neuen MVC 4-Lösung in VS2012 mit Nunit und Ninject.

Wenn ich die Lösung zuerst alle 50 oder so testläuft und erfolgreich öffnete und erfolgreich passieren kann.

Nachdem ich einen Codewechsel (sogar nur einen zusätzlichen leeren Leerzeichen habe), berichtet NCRUm, dass der größte Teil meines Geräts nicht fehlschlagen. Dasselbe passiert, wenn ich die 'Alle Tests ausführen' im NCRUMP-Fenster drücke.

Wenn Sie jedoch den "Ausführen Alle Tests, die hier sichtbare sichtbar sind" drücken, taste 50 Testpass erneut und NCRUM-Berichte ist alles in Ordnung.

Wenn Sie auch jeden Test einzeln ausführen, gehen sie jedes Mal weiter.

Wenn sie nicht fehlschlagen, scheinen sie in meinem Ninject-Setup-Code zu versagen

Fehler: testfixtureSetup in controllltestsetup fehlgeschlagen generasacodicetagpre.

Der gesamte Test läuft auch jedes Mal im Resharper-Testläufer ohne Probleme.

weiß jemand, was dies verursachen könnte?

Ich vermute, dass es etwas mit dem Singleton-Lock-Code in der Instanzeigenschaft zu tun ist, aber ich bin mir nicht sicher.

==================================================================================. Fortschritt:

Ich konnte diese nach unten in der ninject Setup-Methode zu einem Fehler verfolgen oben, indem sie es in einer try catch-Anweisung Einwickeln, und Schreiben der Fehler in das Ausgabefenster.

Die Ausnahme wurde durch den Versuch, ein Modul mehr als einmal zu laden, sogar, dass ich definitiv nicht habe, und ich verwende keine automatische Modulbelastung.

Dies geschieht in den Zeilen generasacodicetagpre.

Wenn LocalsSessionFactoryModule die Ninject-Modulklasse ist, die für die NinjectModule-Klasse abgeleitet ist.

Warum passiert dies nur mit NRCRYCH und was kann ich tun, um dieses Problem zu lösen? Gibt es eine Möglichkeit, zu überprüfen, ob ein Modul bereits geladen wurde?

War es hilfreich?

Lösung

ncrunch führt niemals Tests der Prüfungen innerhalb desselben Prozesses aus, sodass Sie also kein Multi-Thread-Verhalten in Ihrer Testlogik haben, dann sollte es sicher sein, dass dies kein Problem ist, das durch das Sperren oder das Threading über das Singleton verursacht wird .

Da Sie bereits versucht haben, die parallele Ausführung zu deaktivieren, und dies hat nicht einen Unterschied gemacht, davonmehrte ich davon aus, dass das Problem nicht durch gleichzeitige Verwendung von Ressourcen außerhalb des Testlaufprozesses (dh Dateien auf der Festplatte) verursacht wird.

Dies bedeutet, dass das Problem fast sicher mit der Sequenz bezogen ist, in der die Tests ausgeführt werden. Nahezu alle manuellen Testläufern (einschließlich Resharper) führen Tests in einer definierten Reihenfolge von Anfang bis Ende aus. Dies ist gut für die Konsistenz, aber es kann jedoch Probleme maskieren, die auf der Oberfläche sind, wenn die Tests in einer inkonsistenten / zufälligen Reihenfolge ausgeführt werden. Ncunch führt Tests in der Reihenfolge der Priorität aus und können auch Testprozesse zwischen Testläufen wiederverwenden, was das Laufzeitverhalten Ihrer Tests unterscheiden kann, wenn sie nicht dabei konzipiert wurden.

Eine nützliche Methode zur Oberfläche (und damit debug) -Angrenz-Reihenfolge ist das Ausführen Ihrer Tests in einer manuell definierten Reihenfolge mithilfe von NRCROCK. Wenn Sie mit der rechten Maustaste auf einen Test im Fenster NCRUMP-Tests klicken, finden Sie unter dem Menü 'Advanced' eine Option, um einen Test mit einem vorhandenen Task-Runner-Prozess auszuführen. Versuchen Sie diese Aktion mit mehreren Ihrer Tests, um zu sehen, ob Sie die Sequenz reproduzieren können, die das Problem aufweist. Wenn es passiert, sollten Sie leicht einen Debugger auf den Test bekommen und herausfinden, warum es fehlgeschlagen ist.

Die meisten sequenzbezogenen Probleme werden durch unklares statische Elemente verursacht, daher stellen Sie sicher, dass jeder Ihrer Tests in der Annahme geschrieben wird, dass der vorhandene Zustand von einem anderen Test zurückbleibt, der im Prozess ausgeführt wurde. Eine andere Möglichkeit besteht darin, sicherzustellen, dass der gesamte Staat vollständig durch Tests an Riss abgeräumt ist (obwohl dies meiner Meinung nach oft ein weniger pragmatischer Ansatz ist).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top