Asser generali nei test unitari

0

Recentemente ho avuto a che fare con Sr Dev che ama i test delle unità. È fantastico! Non sono sicuro di essere d'accordo con i suoi metodi di prova, però, esempio forzato:

function foo (String $var) {
    switch ($var) {
        case 'hello':
            return '-world';
        default:
            return 'good-bye!';
    }
}

function TestFoo() {
    $result = foo('hello');
    assertInternalType('string', $result);
}

Spero che il problema qui sia ovvio, questi tipi di test in realtà non testano affatto la logica di business, ma fanno aumentano la copertura del codice (che ama sfoggiare). Alla domanda su test come questo, ho ricevuto un messaggio generale "Non l'ho scritto per testarlo (valori restituiti)." risposte.

Questo è abbastanza frustrante per me, soprattutto perché ha iniziato a rimuovere test esistenti che controllano i valori di ritorno a favore di questo test di tipo generico.

Questa è una cattiva pratica, corretta? Proprio ieri ho trovato un bug in una funzione che ha superato il test a causa di questo motivo - non mi fa sentire bene con il codice.

    
posta Flowers4Life 03.02.2017 - 16:03
fonte

1 risposta

4

Un esempio ancora più forzato:

function add(int $i, int $j) {
  return $i - $j;
}

function TestAdd() {
  $result = add(2, 3);
  assertInternalType('int', $result);
}

Questo dovrebbe dimostrare immediatamente l'invalidità di questo tipo di test. Sembra che tu stia usando PHP, quindi puoi ottenere lo stesso numero di test, ma con il vantaggio aggiuntivo di essere integrato con la documentazione, semplicemente facendo questo:

function add(int $i, int $j): int {
//                          ↑↑↑↑↑
  return $i - $j;
}
    
risposta data 03.02.2017 - 16:18
fonte

Leggi altre domande sui tag