Sto testando un servizio della mia applicazione che dipende da altri servizi in fase di esecuzione. Durante il test, sembra che la dipendenza iniettata non funzioni. L'iniezione di dipendenza funziona negli artefatti di Grails durante l'esecuzione dei test di integrazione?Iniezione di dipendenza nei test di integrazione di Grails
risposta
Sì, durante l'esecuzione dei test (ovvero quelli nella directory di integrazione), l'applicazione viene avviata e tutti i bean vengono creati e iniettati come se l'app fosse effettivamente in esecuzione. L'unica differenza tra l'app di test e l'app in esecuzione dovrebbe essere l'ambiente di configurazione.
Ovviamente, se si istanzia una classe che richiede l'iniezione utilizzando l'operatore 'nuovo' nel test, non si otterranno i vantaggi di DI. Invece, creare una proprietà nel vostro banco di prova per il bean vostra prova e sarà iniettato:
class MyServiceTests extends GrailsUnitTestCase {
MyService service
void testInjection() {
assertNotNull service
}
}
Per quelli di voi che usano Grails 1.3.7, ho scoperto che non è possibile utilizzare il nome della classe al fine di far funzionare la dipendenza da iniezione. Invece, dichiarare il servizio come:
def myService
e quindi avviene la DI magia. Con il codice precedente in 1.3.7 l'affermazione non nulla fallirebbe.
1.3.7 e versioni successive. Questo è un problema anche in 2.4.x. Inoltre, per i test di integrazione del controller è necessario istanziare il controller: 'def fooController = new FooController()' - quindi le dipendenze saranno cablate correttamente. –
- 1. Unità di dipendenza dipendenza iniezione
- 2. Iniezione di dipendenza Grails al di fuori dei servizi?
- 3. Filtro test integrazione Grails
- 4. Test di integrazione di Grails con più servizi
- 5. Grails: test di un reindirizzamento con un test di integrazione
- 6. Wcf iniezione di dipendenza
- 7. configurazione simulata nei test di Grails
- 8. Esempio di iniezione dipendenza Yii2
- 9. Iniezione di dipendenza su autorizzazioniOpzioni
- 10. Esecuzione rapida di test di integrazione singola in Grails
- 11. EF: iniezione di dipendenza dall'entità
- 12. Iniezione di dipendenza con jersey
- 13. Laravel: Iniezione di dipendenza Auth
- 14. Iniezione di dipendenza con Orleans
- 15. Iniezione di dipendenza in MVC
- 16. Iniezione di dipendenza senza framework
- 17. Registrazione in Grails durante i test di integrazione
- 18. Errore transactionManager in Grails 3 Test di integrazione
- 19. Scopo di iniezione di dipendenza frameworks
- 20. Iniezione di dipendenza per classi di estensione?
- 21. Schema di strategia contro Iniezione di dipendenza
- 22. Iniezione di dipendenza con interfacce o classi
- 23. Test di integrazione e unità
- 24. Test di integrazione di Grails - Invio di moduli duplicati sempre non validoToken
- 25. Differenza tra MockMvc e RestTemplate nei test di integrazione
- 26. copertura del codice golang nei test di integrazione?
- 27. Ninject iniezione di dipendenza con Decorator modello
- 28. Iniezione dipendenza Autofac in implementazione di OAuthAuthorizationServerProvider
- 29. Inversion of Control <Iniezione di dipendenza
- 30. Decoratore di iniezione Aurelia Dipendenza non funzionante
Grazie. Sto testando un servizio che dipende dai servizi di anothers e lo stavo istanziando e per questo motivo non ho avuto i benefici di DI. – Lucas
Solo una nota a margine. I test di integrazione non dovrebbero estendere GrailsUnitTestCase a seconda della versione, questo può causare seri problemi con ConfigurationHolder.config che è null. Sì grails create-integration-test in molte versioni crea un test che estende GrailsUnitTestCase ma questo è un bug che è stato corretto di recente. –
Perché la risposta dice "Certo, se istanziate una classe che richiede l'iniezione" non otterrete DI? Perché è generalmente il caso? Non era ovvio per me, anche se l'ho risolto dolorosamente. –