Qualsiasi codice può fornire effetti collaterali. Il più delle volte, gli effetti collaterali possono essere un segno di una cattiva progettazione e/o necessità di refactoring, ma durante i test unitari trovo difficile confrontarmi. Si consideri il seguente esempio:Esiste un modo per testare l'unità contro gli effetti collaterali?
[Test]
public void TrimAll_Removes_All_Spaces()
{
// Arrange
var testSubject = "A string with lots of space";
var expectedResult = "Astringwithlotsofspace";
// Act
var result = testSubject.TrimAll();
// Assert
Assert.AreEqual(expectedResult, result);
}
che verifica la seguente estensione:
public static string TrimAll(this string str)
{
PokeAround();
return str.Replace(" ", "");
}
Il test passeranno, ma non v'è alcuna protezione effetti collaterali agains. Gli effetti della chiamata a PokeAround
passeranno completamente inosservati.
Dato che non si sa cosa sia PokeAround
- potrebbe essere qualsiasi cosa! - come scrivi un test che lo difende? è tutto possibile?
Chiarimento: Ci sono stati un paio di commenti sul PokeAround
come completamente sconosciuto essendo uno scenario molto improbabile, dal momento che abbiamo la fonte quando scriviamo il test. Il motivo per cui ho fatto questa domanda, però, era trovare un modo per proteggersi dagli effetti collaterali aggiunti in seguito su. Cioè, quando scrivo il test, potrei avere l'aspetto metodo Exension come questo:
public static string TrimAll(this string str)
{
return str.Replace(" ", "");
}
Il test viene superato, tutto è buono. Poi, un mese dopo, quando sono in ferie, un collega aggiunge la chiamata PokeAround
. Voglio che il test che ho già scritto fallisca perché lo ha fatto.
La domanda è priva di senso. Non puoi inserire il codice di test a cui non hai accesso. "Nella programmazione del computer, il test unitario è un metodo mediante il quale vengono testate singole unità del codice sorgente per determinare se sono idonee all'uso.Un'unità è la più piccola parte testabile di un'applicazione.Nella programmazione procedurale un'unità può essere un individuo funzione o procedura I test delle unità vengono creati dai programmatori o occasionalmente dai tester della scatola bianca. " – WOPR
@WOPR: vedere il mio aggiornamento per uno scenario del mondo reale in cui è pertinente. –
È ancora privo di senso. Ora stai cercando di estendere il concetto di unit test per prevenire l'idiozia in altri programmatori. Il tuo "futuro collega" dovrebbe avere unità testate anche le sue modifiche. Non è possibile utilizzare il test delle unità per verificare le modifiche future ... potrebbe anche avere cancellato tutto il codice e modificato per eliminare il record di avvio principale. – WOPR