Metodo del servizio di test unitario che utilizza il metodo del repository

3

Per i metodi di servizio che richiamano i metodi di repository per interagire con il database, come posso testare questi metodi di servizio unitari?

Ad esempio,

public function updateSlideshow($data){
    // do some logic and method calls (I can test those methods,
    // but for this method that call repository ...)

    $r = $this->blockRepo->update($data, $config, $slides);
}

Come posso verificare che questo metodo funzioni correttamente o almeno inviare dati corretti per aggiornare il metodo?

E per quanto riguarda uno scenario, quel metodo preleva prima i dati dal repository e fa la logica su di esso?

    
posta mohsenJsh 12.01.2016 - 20:26
fonte

2 risposte

4

Supponendo che si stia utilizzando un'iniezione di dipendenza, questa situazione è facilmente risolvibile. Inserirai blockRepo nella classe / modulo contenente updateSlideshow . Quindi, in un ambiente live, si inserisce una versione di blockRepo che comunica con un DB. In un ambiente di test, si inietta una versione che deride questo comportamento, ad esempio, legge / scrive su variabili locali, anziché su un DB, consentendo di simulare vari stati di dati DB per i vari test.

    
risposta data 13.01.2016 - 11:59
fonte
1

Non li testare, almeno all'inizio. Utilizzare un test di integrazione che richiama un database vuoto con il DDL caricato, esegue questo metodo con alcuni input e asserisce sul risultato o sul comportamento dei risultati.

Avere quel test di integrazione sul posto sarà un buon trampolino per la creazione di un doppio di prova. Codifica il tuo codice db-interacting con un'interfaccia che la tua classe db implementa. È quindi possibile eseguire una doppia implementazione di prova che utilizza una mappa localmente per fornire la stessa interfaccia. Quel doppio può essere passato ad altri pezzi di codice che dipendono dalla funzionalità del database. Il test di integrazione che hai scritto per la versione completa del database può essere utilizzato per verificare che il test doppio esponga il comportamento corretto.

    
risposta data 12.01.2016 - 20:50
fonte

Leggi altre domande sui tag