Come testare questo convertitore?

-4

Sto iniziando con il test delle unità in c #.

Ecco il mio convertitore:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    int c = 0;
    if (value != null)
    {
        var path = value.ToString();

        for (int x = 0; x < path.Length; x++)
        {
            if (c == 2) { return path.Substring(x).Replace("%","/"); }
            if (path[x] == '%') c++;
        }
    }
    return value;
}

Qui, se passo una stringa "TestString" o qualsiasi stringa senza%, mi restituirà la stessa stringa, giusto? Cosa devo passare come valore?

    
posta shubham sharma 29.05.2018 - 14:15
fonte

2 risposte

2

Analisi semantica

  • Non ho idea di quale sia l'intenzione di questo metodo.
  • I nomi del metodo e dei parametri non aiutano. Converte ... qualcosa .
  • Non ho accesso ai requisiti per questo metodo.
  • L'uso del tipo object non aiuta.

Direi che l'uso di object è una cattiva progettazione. Invece, vorrei usare string per value e rendere chiamante .ToString responsabilità del chiamante. L'analisi statica ti dirà quindi che il valore di ritorno del metodo può essere anche string .

Vedo commento di Berin Loritsch che dice che questo metodo la firma è richiesta da alcuni sistemi di terze parti (ovvero WPF). Bene, Vergognati. Considera di estrarre il tuo metodo e dargli i tipi appropriati.

Test unitari

È corretto che tu stia testando i tuoi requisiti. Tuttavia, la mancanza di questi non significa che non possiamo considerare alcuni scenari da testare. Tuttavia, dal momento che non siamo sicuri di quale sia il comportamento previsto, non possiamo essere certi dei criteri del passaggio per i test. Se non lo sai neanche tu, immagino che capirai dopo aver considerato ogni caso (o forse quando eseguirai il codice).

Quindi, vediamo alcuni scenari. Considera, qual è l'interfaccia efficace di value :

  • Può essere null , quindi, prova passando null .
  • Chiameremo ToString su di esso. Aha!

    Passa un oggetto che quando chiami .ToString su di esso ...

    • Genera un'eccezione.
    • Restituisce null.
    • Restituisce una stringa vuota.
    • Restituisce una stringa.
  • Chiamerà Substring sul risultato e quindi Replace("%","/") . Vediamo anche un assegno per due, quindi andiamo - almeno - fino a tre.

    Passa un oggetto che quando chiami .ToString su di esso ...

    • restituisce una stringa che contiene un singolo "%"
    • restituisce una stringa che contiene un paio "%"
    • restituisce una stringa che contiene tre "%"

Note :

  • Potresti voler restituire stringhe di lunghezze diverse.
  • Quelle stringhe possono contenere altre cose oltre a "%".

Per quanto riguarda i metodi basati su stringhe di test unitari, potresti anche voler testare stringhe con simboli orientali, emoji, coppie surrogate, caratteri compositi, spazio a larghezza zero e da sinistra a destra e da destra a sinistra segni. Tuttavia, se trovi qualcosa di sbagliato qui, è molto probabilmente un bug in .NET.

Con i requisiti, potrebbero esserci più test da fare. Inoltre, man mano che vedi i risultati e migliora il codice, potrebbero esserci test di regressione o test progettati per aumentare la copertura.

Analisi statiche

I test non sostituiscono l'analisi statica. E qualsiasi strumento di analisi statica ti dirà che non stai utilizzando targetType , parameter e culture .

Suppongo che questo sia un triste fatto accettato e che chiunque lavori con questo sistema lo capirà presto. Tuttavia, ti dirò comunque di considerare l'aggiunta di un commento per la mancanza di utilizzo di questi parametri. Ciò faciliterà la leggibilità, in particolare per le persone che non hanno familiarità con il sistema (come me).

    
risposta data 29.05.2018 - 16:25
fonte
2

Hai tre cose principali da testare:

  • Passaggio di un valore nullo
  • Passaggio di stringhe che non vengono mutilate
  • Trasmissione di stringhe che vengono manchiate, assicurandosi che siano storpiate correttamente

Oltre a questo, potresti voler controllare se la tua logica si rompe con una stringa vuota. NOTA: sembra che questo dovrebbe sostituire tutte le istanze di % con / se ci sono esattamente 2. La domanda è se ci sono ulteriori regole che devono essere definite.

    
risposta data 29.05.2018 - 14:40
fonte

Leggi altre domande sui tag