Test delle unità: i test per un metodo devono validare i risultati di altri metodi?

1

Una cosa che mi dà fastidio mentre scrivo i test unitari del mio codice è se i test dei metodi dovessero includere la convalida del risultato di altri metodi? Certo, metodi pubblici. Vediamo un esempio piuttosto banale:

public int Solve(string forumla)
{
    if (forumla.Contains("+")) 
    {
        return SolveAddition(formula);
    }
    if (forumla.Contains("-"))
    {
        return SolveSubstraction(formula);
    }
    throw new ArgumentException();
}

public int SolveAddition(string formula)
{
    var strings = formula.Split('+');
    if (strings.Length != 2)
    {
        throw new ArgumentException();
    }
    int firstFactor = int.Parse(strings[0]);
    int secondFactor = int.Parse(strings[0]);
    return firstFactor + secondFactor;
}

In questo caso, i test dei metodi Solve devono solo testare il flusso di controllo o ogni possibile scenario di SolveAddition ? Supponiamo che SolveAddition e SolveSubstraction abbiano i loro test.

Utilizzando altre parole, gli scenari di test per Solve dovrebbero contenere solo:

  • 2 + 2
  • 2-2
  • 2: 2

O anche includere:

  • 2 + 2 + 2 + 2
  • 2-2-2-2
  • patata - criceto

Distinti saluti

    
posta Thaven 30.07.2014 - 11:22
fonte

2 risposte

9

No, un test unitario dovrebbe testare la cosa che sta mirando e nient'altro. Puoi supporre che qualsiasi altro metodo che questo metodo chiama fa la cosa giusta, perché devono avere i loro test unitari.

Se uno di quei metodi di supporto era sbagliato, riceverai un avviso quando viene eseguito quell'altro test, e dal momento che dovresti eseguire l'intera suite di test e solo spingere quando l'intera suite ha esito positivo, testare la stessa cosa una seconda volta è solo una perdita di tempo.

    
risposta data 30.07.2014 - 11:26
fonte
1

Per ogni dato codice, ci dovrebbe essere al massimo un posto che è responsabile per esaustivamente testare quel codice.

Ci può essere un qualsiasi numero che incidentalmente testarlo; non vuoi sprecare tempo a correre su una montagna esponenzialmente grande.

Per il tuo esempio, l'insieme minimo di casi di test è un elenco di forum validi non validi, oltre a un elenco di formule valide con risposte previste. Questi elenchi non diventano più brevi se si dividono i casi di addizione e sottrazione.

Quindi il posto giusto per testare tutte e tre le funzioni sarebbe tramite "Risolvi".

In questo modo, quando decidi di dover gestire "2 + 3 - 1", lo sposti semplicemente da una lista all'altra.

    
risposta data 30.07.2014 - 18:34
fonte

Leggi altre domande sui tag