Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Extension methods nello unit testing

Uno dei problemi maggiori che si incontra nello unit testing di codice già esistente e non scritto secondo I principi del "design for testability" è l'impossibilità di verifcare lo stato interno di un oggetto. Talvolta infatti per verificare che un test è andato a buon fine è necessario andare a verificare il valore di una variabile privata del SUT (System Under Test), ma naturalmente questo non è possibile farlo dal test. Questa necessità emerge più spesso del previsto, ad esempio se il SUT è un oggetto a stati ed il chiamante non ha necessità di conoscere lo stato corrente, è praticamente impossibile verificare che un determinato input causi la transizione di stato corretta nel SUT. Chiaramente questo tipo di testing non è un "black box testing" dove viene esercitato il SUT solamente tramite la sua interfaccia, ma è sicuramente necessario per assicurarsi del buon funzionamento dell'oggetto.

Una soluzione standard a questo problema è creare una classe che eredita dal SUT (se quest'ultimo non è sealed), ed inserire in questa classe tutti i metodi/proprietà necessari per esporre all'esterno tutto lo stato interno dell'oggetto, in questo modo si "apre una finestra" sul funzionamento interno dell'oggetto senza però modificarlo in nessun modo. Una soluzione migliore fornita dal C# 3.0 sono gli extension methods, con i quali si possono aggiungere metodi a classi già esistenti. Grazie agli extension methods è infatti possibile dotare il SUT degli appositi metodi di ispezione per verificare il suo stato interno, senza per questo modificare la sua interfaccia in produzione.

Alk.

Print | posted on Monday, August 13, 2007 6:44 PM | Filed Under [ Testing ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET