2016-05-21 7 views
7

In meinen Integrationstests verwende ich eine Klasse TestServer, um auf eine Testserverinstanz für meine Integrationstests hinzuarbeiten. In RC1, instanziiert ich es mit dem folgenden Code:Integrationstests nach der Migration zu ASP.NET Core RC2 unterbrochen

var server = new TestServer(TestServer.CreateBuilder().UseStartup<Startup>()); 

Auf RC2 wurde TestServer.CreateBuilder() entfernt. Deshalb habe ich versucht, einen neuen Testserver mit dem folgenden Code zu erstellen:

var server = new TestServer(new WebHostBuilder().UseStartup<Startup>()); 

Das Problem, das ich mit Blick auf bin ist, dass nach RC2, die Laufzeit nicht in der Lage ist Abhängigkeiten für DI zu lösen, so dass es Ausnahmen von der Konfiguration wirft Methode für die Startup-Klasse. Das System startet jedoch, wenn ich den eigentlichen Server starte (nicht das Testprojekt). Die Ausnahme ausgelöst ist, wie folgend:

System.Exception : Could not resolve a service of type 'ShikashiBot.IShikashiBotManager' for the parameter 'botManager' of method 'Configure' on type 'ShikashiBot.Startup'. 

ich zur Zeit des folgenden Paket für die Test-Host mit: Microsoft.AspNetCore.TestHost": "1.0.0-rc2-final

+0

Es klingt, als ob Sie einige Typen aus dem DI-Container vermissen. Aber der Typ kommt nicht von ASP.NET. Wahrscheinlich ist es einer Ihrer Typen 'ShikashiBot.IshikashiBotManager' –

+0

@VictorHurdugaci, wie ich in meinem ursprünglichen Post gesagt habe, wenn das der Fall wäre, hätte meine Anwendung nicht begonnen, wenn ich es als normal begonnen hätte. Es gab auch keine Änderungen an den Elementen, die während der Migration zum DI-Container hinzugefügt wurden. – Martin

+0

Sind Sie sicher, dass 'Program.cs' nicht in' Startup' enthalten ist? –

Antwort

7

ich einige Änderungen erforderlich, um Ihre Repo an der Arbeit:

  1. I musste appsettings.sample.json zu appsettings.json umbenennen, ich denke, das ist nur, weil es nicht in der Quellcodeverwaltung ist.
  2. Ich musste "buildOptions": { "copyToOutput": [ "appsettings.json" ] } zu dem project.json des IntegrationTests-Projekts hinzufügen.
  3. Hatte die Log-Ebene Verbose zu Debug in Ihrem appsettings.json zu ändern.

Aber danach die Integrationstest EndPointsRequiresAuthorization geht durch die Dependency Injection, und für mich nicht es mit einer Ausnahme in ShikashiBotManager, ich denke, weil ich einrichten nicht die Postgre DB haben.
Für Sie schlägt es bereits vor, weil es die IShikashiBotManager Schnittstelle nicht auflösen kann, richtig?

Können Sie versuchen, eine vollständige Säuberung Ihres lokalen Repository zu tun mit git clean -xfd (HINWEIS: Ihre nicht lokal verpflichtet Änderungen werden gelöscht), wieder aufbauen und versuchen Sie es erneut?

+0

Es scheint, dass die fehlende Konfiguration (Schritt 2) der Hauptgrund für mein Problem war. Ich finde es immer noch seltsam, dass eine fehlende Konfigurationsdatei das IShikashiBotManaged nicht auflöst. Prost! – Martin

+0

Die Auflösung von .net-Kerntypen scheint tatsächlich ein sehr seltsamer Prozess zu sein. Die Mysterien der internen Funktionsweise von project.json können für einige Zeit unklar bleiben. –