2014-11-03 20 views
5

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?

+3

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. –

risposta

4

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.

+0

Grazie per la risposta. Spiacenti, ma non riesco a risolvere ** l'annotazione di classe ** ** e ** Bind ** di BoundFieldModule. – Nikolas

+1

@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. –