Devo avere il codice che esiste solo per il test?

2

Ho una classe di servizio che è responsabile della creazione di istanze di repository e del loro utilizzo. Fa una richiesta Http esterna che idealmente mi piacerebbe prendere in giro per il test. Tuttavia, non sono del tutto sicuro del modo migliore per farlo.

Ad esempio, ora la classe ha questo aspetto:

public function lookUp($identifier)
{
    $client = new Curl();
    $data = $this->provider->lookUp($identifier, $client);

    // do stuff w the response
}

Non è possibile prendere in giro la risposta Http poiché è contenuta nel metodo.

Un'alternativa potrebbe essere quella di fare qualcosa di simile a questo:

public function lookUp($identifier, $client = null)
{
    if ($client === null) {
        $client = new Curl();
    }

    $data = $this->provider->lookUp($identifier, $client);

    // do stuff w the response
}

e quindi potrei avere un client $ per il beffardo nel mio test. Tuttavia, ciò significherebbe il cambiamento (e la messaggistica) del mio codice solo per lo scopo del test.

Dovrei farlo? C'è un modo migliore per testarlo?

    
posta tam5 12.04.2016 - 17:22
fonte

1 risposta

12

È una questione di prospettiva. Scrivere test per il nostro codice ci costringe a disaccoppiare il codice. Potresti visualizzare questo come "codice che esiste solo per i test", ma penso che questo sia fuorviante.

Quello che stai facendo in realtà è disaccoppiare il tuo codice. Stai rimuovendo le dipendenze e eliminando i mal di testa che arrivano con il codice che new s su tutto ciò di cui ha bisogno. Questi sono obiettivi desiderabili a pieno titolo. Ha anche l'effetto che il codice diventa più testabile, quindi puoi guardarlo in entrambi i modi.

Affinché il codice sia testabile, deve essere "buono" (usato in modo molto sciatto, sono consapevole che qualsiasi disciplina può essere utilizzata in modo improprio per produrre un pasticcio). Perché il codice sia "buono", deve essere testabile (almeno in parti grandi).

Puoi scegliere quello che ti piace di più: avere test di regressione automatici o avere un design più facile da modificare e / o refactoring in seguito.

    
risposta data 12.04.2016 - 17:32
fonte

Leggi altre domande sui tag