Sono interessato a scrivere test di unità (utilizzando NUnit) per alcune classi di servizio create utilizzando ServiceStack, utilizzando la "Nuova API" (che eredita da ServiceStack.ServiceInterface.Service). La proprietà Db dei servizi è correttamente auto-cablata quando è ospitata in un'applicazione ASP.NET utilizzando AppHost, ma non riesco a capire la tecnica corretta quando si esegue al di fuori di tale ambiente. Vedo una varietà di spazi dei nomi e classi di testing in ServiceStack ma non riesco a trovare un chiaro esempio di iniezione di proprietà Db di un servizio, piuttosto che impostare semplicemente un factory di connessione direttamente e quindi chiamare i vari metodi di estensione IDbConnection (Insert , Seleziona, ecc.).Come faccio ad iniettare Db in classi di servizio quando l'unità esegue il test di ServiceStack.OrmLite con NUnit?
ho provato avere il mio compito in classe eredita da ServiceStack.ServiceInterface.Testing.TestBase e ridefinendo il suo metodo Configura per registrare un IDbConnectionFactory (utilizzando ": la memoria:"), così come l'impostazione OrmLiteConfig.DialectProvider = SqliteDialect.Provider;
nel mio TestFixtureSetUp, ma io continuo per ottenere una NullReferenceException quando si chiamano i miei metodi di servizio (su at ServiceStack.ServiceInterface.Service.get_Db()). Sembra che il contenitore Funq non stia collegando automaticamente nulla.
SQLite stesso è impostato correttamente, che sono in grado di confermare con test di unità più semplici che ignorano le mie classi di servizio e fanno semplicemente chiamate dirette IDbConnection.
Cosa mi manca?
Modifica
Sembra che i servizi di unit test ServiceStack richiede l'esistenza di un host e un cliente, anche se sembra che ci sono modi per impostare questa funzione per evitare i costi di serializzazione (utilizzando il DirectServiceClient, come mostrato here) - anche se non sono riuscito a farlo funzionare nel mio caso. Sono riuscito a farlo funzionare usando un approccio AppHostHttpListenerBase (vedi here) anche se è più un test di integrazione che un'unità uno (ed è di conseguenza più lento).
Questo ha funzionato perfettamente! Grazie! Ho dovuto convertire una delle mie ExpectedExceptions in quella interna (HttpError) dal wrapper (WebServiceException), ma ciò ha senso dato che non sto più passando attraverso un client di servizio. –