.net Kern rc2 nicht trivialen Integrationstest funktioniert nicht

9

Der folgende Code funktioniert wie erwartet und ist den auf der ASP-Site gefundenen Beispielen sehr ähnlich:

%Vor%

Mein Test funktioniert gut, es erreicht die Aktion im Controller ganz gut. Im wirklichen Leben sind die Tests jedoch etwas komplizierter. Ich muss einige Dienste und eine benutzerdefinierte Testkonfiguration hinzufügen.

Um dies zu tun, erstelle ich einen TestStartup, der von meinem ursprünglichen Projekt Startup-Klasse erbt:

%Vor%

Wie Sie sehen, delegiert es nur an die Basisklasse, also ändere ich jetzt den Builder, um meinen TestStartup-Code zu verwenden:

%Vor%

Und die Tests scheitern jetzt mit der Http NotFound-Ausnahme. Beim Debugging stellt sich heraus, dass die Aktion im Controller nicht mehr vom Testcode getroffen wird.

Meine Vermutung ist, dass mvc irgendwie die Routen nicht erkennt, wenn die Startup-Datei eine andere Assembly ist als die Controller, wie kann ich das umgehen?

    
Calin 21.06.2016, 09:19
quelle

4 Antworten

1

Ich habe einen Artikel über diese Art von Integrationstests mit xUnit geschrieben: Ссылка .

Der Ansatz, den ich gewählt habe, bestand darin, eine Klasse Fixture zu erstellen, die in Ihre Testklasse eingefügt werden kann.

Das Fixture:

%Vor%

Die Testklasse implementiert dann IClassFixture<TestFixture<TStartup>> :

%Vor%

Um MVC zu verwenden und sicherzustellen, dass Ihre Ansichten erkannt werden, sollten Sie Ihr WebHostBuilder aktualisieren, um den Inhaltspfad festzulegen:

%Vor%     
Sock 21.06.2016 18:33
quelle
1

Eine weitere zusätzliche Änderung, die ich vornehmen musste, um eine überschriebene Startup-Klasse zum Laufen zu bringen, bestand darin, ApplicationName im IHostingEnvironment-Objekt auf den tatsächlichen Namen des Webprojekts zu setzen.

%Vor%

Dies ist erforderlich, wenn sich der TestStartup in einer anderen Assembly befindet und die ursprüngliche Startup-Klasse überschreibt. UseContentRoot wurde in meinem Fall immer noch benötigt.

Wenn der Name nicht gesetzt ist, habe ich immer eine 404 nicht gefunden.

    
abhijoseph 06.01.2017 18:56
quelle
0

Welche .net-Core-Version verwenden Sie? Vorschau1?

Aktualisierung auf RTM (Vorschau2-31 ...) Vielleicht sind Sie auf einen Fehler gestoßen, der bereits behoben wurde.

    
Eric Liu 30.06.2016 03:56
quelle
0

Sie können Ihre Dienste auf diese Weise nicht durch Testdienste überschreiben. Was ich getan habe, war Methoden zu erstellen, die Abhängigkeiten hinzufügten und die Methode übersteuerbar machten. Dann würde ich in meinem Test diese Methode überschreiben und verschiedene Abhängigkeiten einfügen.

Ich erkläre das auch in meinem Blog: Ссылка

    
Stefan Hendriks 30.08.2016 12:58
quelle