Come testare le implementazioni di Guice AbstractModule in un grande progetto senza creare false implementazioni? È possibile testare i metodi bind() e inject()?Come testare le implementazioni di Guice AbstractModule?
risposta
In genere, il modo migliore per testare i moduli Guice consiste semplicemente nel creare un iniettore nel test e assicurarsi di poter ottenere istanze di chiavi a cui importa.
Per fare ciò senza causare problemi di produzione, potrebbe essere necessario sostituire alcuni moduli con altri moduli. È possibile utilizzare Modules.override
per sovrascrivere selettivamente i singoli binding, ma di solito si preferisce non installare semplicemente i moduli di tipo "produzione" e utilizzare invece i binding falsi.
Da Guice 4.0 è disponibile una classe di supporto BoundFieldModule
che può essere d'aiuto. Spesso mi ha installato test come:
public final class MyModuleTest {
@Bind @Mock DatabaseConnection dbConnection;
@Bind @Mock SomeOtherDependency someOtherDependency;
@Inject Provider<MyThing> myThingProvider;
@Before public void setUp() {
MockitoAnnotations.initMocks(this);
Guice.createInjector(new MyModule(), BoundFieldModule.of(this))
.injectMembers(this);
}
@Test public void testCanInjectMyThing() {
myThingProvider.get();
}
}
C'è di più documentation for BoundFieldModule
sul wiki Guice.
Grazie per la risposta. Spiacenti, ma non riesco a risolvere ** l'annotazione di classe ** ** e ** Bind ** di BoundFieldModule. – Nikolas
@Nikolas: Puoi fare la stessa cosa creando semplicemente una sottoclasse anonimo 'AbstractModule' nel tuo test, ovviamente -' BoundFieldModule' è solo una scorciatoia. (Se non è disponibile nel tuo progetto, potresti voler aggiornare Guice alla versione più recente.) La parte importante della risposta è che il modo migliore per garantire che le tue dipendenze siano corrette è semplicemente creare un 'Injector' nel tuo test, e verificare che funzioni come previsto. –
- 1. Guice/Gin. Come iniettare più implementazioni
- 2. Come funzionano le implementazioni di BigNums?
- 3. Iniezione costruttore con Guice
- 4. Come testare le API
- 5. Come usare l'iniettore di Guice?
- 6. Modulo Guice con parametri tipo
- 7. ClassNotFoundException con Guice 2.0
- 8. Come fornire specifiche implementazioni GWT
- 9. Differenze tra le implementazioni JVM
- 10. Qualcuno ha utilizzato ServiceLoader insieme a Guice?
- 11. iniettando chiamato Guice Singleton
- 12. Come testare le classi astratte
- 13. Come testare le query HQL?
- 14. Come testare le transazioni MySQL?
- 15. Come si trovano rapidamente le implementazioni del metodo di un'interfaccia?
- 16. Come posso testare le Query di Django?
- 17. Come testare le prestazioni di un'applicazione Android?
- 18. Come posso testare le migrazioni di FluentMigrator?
- 19. Come testare le dichiarazioni di stampa?
- 20. Jersey Guice JSP come?
- 21. Come usare Guice AssistedInject?
- 22. auto scan for guice
- 23. Come utilizzare Guice nell'applicazione Swing
- 24. Guice inserisce solo alcune delle funzioni di costruzione
- 25. Le implementazioni IDisposable.Dispose() dovrebbero essere idempotenti?
- 26. Python: gonfiare e sgonfiare le implementazioni
- 27. Le attuali implementazioni XHR sfruttano HTTP/2?
- 28. uscita a caso diverso tra le implementazioni
- 29. Fornitore di Guice RESTEasy
- 30. Google Guice non è solo un'altra fabbrica?
Non si vuole testare il framework, quindi fidarsi solo di guing che legano e iniettano funzionano bene. Se si desidera testare le implementazioni del modulo, dare un'occhiata a Modules.overwrite, è possibile mantenere i moduli di produzione e sovrascrivere solo abbastanza elementi finti/finti in modo da poterli facilmente testare. –