Dovrei inserire il nome del metodo che sto testando nel nome del metodo Unit Test / assert messaggio? [chiuso]

-1

Dato che il nome di un metodo potrebbe cambiare nel tempo, è una buona idea specificare il nome del metodo il cui valore di ritorno sto asserendo come parte del nome del metodo Test unitario? E il messaggio che verrà trasmesso al chiamante?

Ad esempio, ho un oggetto Foo con un metodo Bar . Vorrei dichiarare se Bar restituisce true in alcune condizioni specifiche. Scrivo un tale Test unitario:

public void Bar_ReturnsTrue_Always()
{
    // the logic of the method goes here

    Assert.IsTrue(Foo.Bar(), "Return value of Bar was different then: true"
}

Mi sembra abbastanza brutto, perché il nome Bar potrebbe cambiare in futuro, ad esempio a Blargh . Se ciò accade, c'è la possibilità che lo sviluppatore si dimentichi di cambiare le informazioni rilevanti in uno o entrambi i punti in cui è necessario (nome del metodo e messaggio). D'altra parte, in che modo il chiamante dovrebbe sapere cosa viene testato se tali informazioni non sono pubblicamente presenti? Non riesco a pensare a una soluzione abbastanza buona per questo. Qualche idea?

    
posta Kapol 17.10.2014 - 17:14
fonte

2 risposte

7

Non è generalmente necessario. Come dice @Telastyn, se il test fallisce, allora diventerà rapidamente e prontamente evidente quale metodo ha fallito.

Il vero bisogno è che lo scopo del test sia facilmente compreso da quelli che

  1. sta aggiungendo, rivedendo o modificando i test dopo di te (anche se quella persona è anche tu), e
  2. sta esaminando il codice e cercando le cause se / quando il test fallisce.

Non è una cattiva pratica, di per sé, nominare il metodo nel caso / funzione di test o nel messaggio di errore. Se è facile da fare e si sente appropriato - come nel tuo esempio - sentiti libero. Se il test è "Bar () dovrebbe restituire true" allora Bar_Always_True è ragionevole. D'altra parte, se il tuo metodo è AddInt e stai testando A + B == B + A, Addition_Is_Commutative potrebbe avere più senso di un nome del caso di test che insiste sull'includere AddInt nel nome. Questo principio "afferma la tua intenzione piuttosto che il nome del tuo metodo" diventa sempre più importante in quanto i casi di test diventano più complessi, potenzialmente coinvolgendo più di un metodo.

    
risposta data 17.10.2014 - 17:42
fonte
3

No, non è necessario aggiungere messaggi alla maggior parte delle asserzioni. Scrivere i test delle unità come suggerisci sarebbe inutilmente noioso. Presumibilmente il metodo Assert.IsTrue genererà un'eccezione dicendo qualcosa come "Previsto vero, ottenuto falso". La traccia dello stack che ne deriva determinerà la causa dell'errore.

NB. In generale, come programmatore, non dovresti passare il tempo a scrivere codice ovvio e ripetitivo. Se lo sei, allora è probabile che tu fraintenda la libreria che stai usando, oppure c'è qualche libreria che semplificherà il lavoro. Se ritieni che il tuo lavoro possa essere svolto da una scimmia addestrata, qualcosa non va.

    
risposta data 17.10.2014 - 19:32
fonte

Leggi altre domande sui tag