Cosa dovrebbe fare un test del metodo di prova? [chiuso]

1

Supponiamo di testare una classe con un framework xUnit-like, quindi viene creata una classe di test per la classe under-test. Ora, quanto dovrebbe essere testato dai singoli metodi di test?

Ci dovrebbe essere una mappatura uno-a-uno tra metodi sotto test e metodi di test:

class TestMath {

    testSqrt() {
        assertEquals(Math.sqrt(4), 2);

        assertException(Math.sqrt(-2));
    }
}

O è meglio avere un metodo di prova per "scenario":

class TestMath {

    testSqrtOfPositiveNum() {
        assertEquals(Math.sqrt(4), 2);
    }

    testSqrtOfNegativeNum() {
        assertException(Math.sqrt(-2));
    }
}

Quale è meglio e quali sono i pro e i contro di entrambi i metodi?

    
posta el.pescado 20.03.2013 - 21:08
fonte

3 risposte

5

Il secondo approccio è migliore. Se uno dei test fallisce, saprai immediatamente qual è il problema. Se i metodi di test verificano molte condizioni, se una di esse fallisce, dovrai scavare per capire quale sia il problema.

    
risposta data 20.03.2013 - 22:19
fonte
4

Personalmente preferisco l'approccio allo scenario, ricorda più da vicino il modo in cui il codice verrà usato e è meno probabile che si interrompa, basta fare qualche modifica nel modo in cui funziona il codice sottostante.

    
risposta data 20.03.2013 - 21:22
fonte
2

La regola generale è avere un assert per test.

Per quanto riguarda il livello a cui dovresti testare. Mi piace estrapolare la logica di base nei motori logici che possono essere testati utilizzando test unitari a livello di metodo di basso livello. Ma hanno anche test di livello più alto eseguiti a livello di scenario. In questo modo i test di alto livello parlano della funzionalità dell'intero sistema e i test di basso livello assicurano che tutti i percorsi siano stati testati correttamente. Quando qualcosa si rompe, puoi vedere dove si è rotto, ma anche come si manifesterà la rottura a un livello più alto.

Nel tuo caso lo dividerei in due test in modo che tu possa vedere esattamente ciò che ha infranto piuttosto che sapere che qualcosa si è rotto.

    
risposta data 20.03.2013 - 22:30
fonte

Leggi altre domande sui tag