2011-12-22 4 views
26

Sto lavorando a un'applicazione Spring (Spring 3.0) e seguendo l'architettura a strati, ad esempio Controller -> Service -> DAO layers.Junit per testare il servizio Spring e il livello DAO

Desidero scrivere casi di test unitari per il livello di servizio e DAO utilizzando Junit.
Ho controllato il sito ufficiale di Spring e ho anche provato molti altri siti, ma non sono riuscito a trovare un modo semplice e semplice per farlo.

Qualcuno può fornirmi alcune risorse utili?


EDIT:
Sembra Mockito è la buona opzione. Qualsiasi buon link per usarlo in primavera.

Grazie Alex per averlo suggerito.

+0

ATTENZIONE. Il link "Mocking service layer" ora conduce a una pagina dannosa. – Cenobyte321

+0

@ Cenobyte321 Grazie, collegamento rimosso. – xyz

+0

Se si utilizza l'ibernazione e l'avvio a molla, perché non configurare un H2 nel database di memoria inizializzato quando si avvia il test? Quindi usa Annotation SpringBootTest AutoConfigureTestEntityManager Transactional nella tua classe di test e solo Autowired il tuo dao e puoi davvero testarlo senza simulazione.Meglio puoi usare MockMvc e testare il tuo intero webservice dal controller (e quindi credo che il tuo controller usi il servizio che usa dao) – amdev

risposta

25

In termini di risorse, la documentazione Spring sui test è molto buona. Questo può essere trovato here.

Quando si esegue il test del livello di servizio, si vorrà utilizzare una libreria di derisione come Mockito per prendere in giro i DAO e quindi il livello del dominio. Questo assicura che siano veri test unitari.

Quindi al test di integrazione dei DAO su un database è possibile utilizzare le utilità di test transazionale Spring descritte in tale documentazione di riferimento.

+0

Grazie. Non ero a conoscenza di Mockito. Cercherò di aggiornarti. – xyz

+0

Ho trovato che Mockito è molto potente e facile da usare. Tutti i miei test di unità di servizio lo usano. –

+0

Ho appena visto, provato e apprezzato. Grazie uomo. Qualche link valido per utilizzare Mockito per i test del servizio Spring? – xyz

4

non sanno molto sulle risorse, ma non è così difficile da fare se si ha la configurazione dao + primavera piacevolmente. Avrai bisogno di quanto segue:

  1. Dipendenze da JUNIT in modo obivo. con Maven, qualcosa di simile:

    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.8.2</version> 
    </dependency> 
    
  2. La classe di test, che si inserisce all'interno src/test/java:

    @TransactionConfiguration(defaultRollback = true) 
    @ContextConfiguration({ "classpath:test-spring-context.xml" }) 
    @Transactional 
    @RunWith(SpringJUnit4ClassRunner.class) 
    public class SomeTests { 
        // ... 
    } 
    
  3. Il file di contesto per la configurazione di primavera referenziare la tua origine dati DAO inserito all'interno/test/risorse src. Da qualche parte nel tuo test-spring-context.xml:

    <import resource="datasource-test.xml" /> 
    

Ora, per esempio in Eclipse è possibile eseguire il progetto come un test JUnit.

Hai bisogno di maggiori dettagli? Questa soluzione è applicabile?

+0

Grazie. Come posso testare il livello di servizio? – xyz

+0

Non sei sicuro di quale sia esattamente un servizio per te, ma presumo che sia necessario mantenere la logica dell'applicazione, chiamando i metodi CRUD sui DAO ogni volta che il controller glielo dice? Se è così, non c'è differenza. È sufficiente iniettare la classe di servizio nell'impostazione di cui sopra, chiamare i metodi, confrontare i risultati e in seguito verrà eseguito il rollback. – Pete

+0

Sì. Per servizio intendo classe che richiama i metodi DAO. – xyz