2016-05-21 36 views
7

Nei test di integrazione, utilizzo una classe TestServer per lavorare verso un'istanza del server di test per i miei test di integrazione. In RC1, ho istanziare utilizzando il seguente codice:Test di integrazione interrotti dopo la migrazione a ASP.NET Core RC2

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

Su RC2, TestServer.CreateBuilder() è stato rimosso. Pertanto, ho cercato di creare un nuovo TestServer utilizzando il seguente codice:

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

Il problema che sto affrontando è che dopo RC2, il runtime è in grado di risolvere le dipendenze per DI, in modo che esso genera eccezioni su Configura metodo per la classe di avvio. Il sistema tuttavia si avvia se avvio il server attuale (non il progetto di test). L'eccezione generata è la seguente:

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

Attualmente sto usando il seguente pacchetto per il test di host: Microsoft.AspNetCore.TestHost": "1.0.0-rc2-final

+0

Sembra che manchino alcuni tipi dal contenitore DI. Ma il tipo non proviene da ASP.NET. Probabilmente è uno dei tuoi tipi 'ShikashiBot.IShikashiBotManager' –

+0

@VictorHurdugaci come ho detto nel mio post originale, se fosse il caso, la mia applicazione non sarebbe iniziata se l'avessi avviata normalmente. Non sono state inoltre apportate modifiche agli elementi che sono stati aggiunti al contenitore DI durante la migrazione. – Martin

+0

Sei sicuro che non ci sia qualcosa in 'Program.cs' che non è incluso in' Startup'? –

risposta

7

avevo bisogno alcune modifiche per ottenere il vostro repo al lavoro:

  1. I dovuto rinominare appsettings.sample.json a appsettings.json, penso che questo sia solo perché non è nel controllo del codice sorgente.
  2. Ho dovuto aggiungere "buildOptions": { "copyToOutput": [ "appsettings.json" ] } allo project.json del progetto IntegrationTests.
  3. dovuto modificare il livello di registro Verbose a Debug nel appsettings.json.

Ma dopo questo il test di integrazione EndPointsRequiresAuthorization passa attraverso l'iniezione di dipendenza, e per me non riesce con un'eccezione in ShikashiBotManager, credo perché non ho il Postgre DB istituito.
Per voi già fallisce prima, perché non è possibile risolvere l'interfaccia IShikashiBotManager, giusto?

Puoi provare a fare una purga completo del vostro repository locale con git clean -xfd (NOTA: verranno eliminate le modifiche locali non commessi), ricostruire e provare di nuovo?

+0

Sembra che la configurazione mancante (passaggio 2) sia stata la causa principale del mio problema. Trovo comunque strano che un file di configurazione mancante faccia sì che IShikashiBotManaged non sia risolto. Saluti! – Martin

+0

La risoluzione dei tipi di core .net sembra essere davvero un processo molto strano. I misteri del funzionamento interno di project.json possono rimanere oscuri per qualche tempo. –