I diversi quadri hanno diversi target di pubblico?
Sì. Alcuni framework come Microsoft Moles , TypeMock Isolator e JustMock , ti permettono di essere in grado di prendere in giro qualsiasi cosa. Questi strumenti di derisione sono generalmente migliori per gli sviluppatori che desiderano utilizzarli su un codice legacy esistente poiché potrebbe non essere possibile rifattorizzarli in un progetto più verificabile. *
Tradizionalmente, i progetti testabili significano che il codebase deve fare un uso liberale di interfacce, classi astratte, metodi virtuali, classi non sigillate, ecc. Pertanto, i tradizionali sistemi di derisione come Moq e RhinoMocks funzionano bene con il codice sviluppato utilizzando Test Driven Development, Dependency Injection e altri simili concetti. A proposito, ti consiglio vivamente di usare Dependency Injection perché ottieni molto più del semplice codice testabile, ma anche un codice più gestibile.
Quali fattori dovrei prendere in considerazione quando scelgo quale struttura è adatta alla mia situazione?
-
Attività di sviluppo. Strumenti come Moq e RhinoMocks sono molto attivi e popolari e quindi aggiornati.
-
Vs Open Source. Commerciale . Considera i vari pro e contro tipici di questo confronto. Costo, supporto, ecc.
-
Maturità. Quanto è nuovo lo strumento. È in versione beta (come Microsoft Moles) o ha avuto diverse versioni stabili? Ad esempio, mi piace Moles per il codice legacy, ma ci sono diversi bug che devono essere affrontati in esso e ci sarà da attendere prima che vengano indirizzati (prossima release, novembre 2011).
-
Documentazione. Esistono diversi libri e blog che coprono il test delle unità, il mocking, l'auto-mocking, ecc. Inoltre, quanto è buona la documentazione dello strumento?
-
Sintassi . Ogni strumento ha il suo modo di dire la stessa cosa. Scopri quale ti è più adatto.
-
Velocità . Gli strumenti che usano il profiling CLR (TypeMock, Moles, JustMock), possono essere molto più lenti di quelli tradizionali (Moq, RhinoMocks). Questa penalità di velocità può essere un problema in quanto si accumulano molti test unitari. La regola generale è che se un test richiede più di 1/10 al secondo, è troppo lento.
-
Supporto della community . Gli altri sviluppatori stanno scrivendo altri strumenti che estendono (o lavorano in complimento) allo strumento di simulazione? Esiste un progetto Moq.Contrib che aggiunge un'abilità Auto-mocking a Moq (che aiuta ad accelerare la scrittura di test tempo). Meglio ancora, c'è AutoFixture , AutoFixture.AutoMoq, AutoFixture.AutoRhinoMocks, che consente anche Auto-mocking, oltre alla creazione di variabili anonime.
* Vedi Funzionante in modo efficace con il codice legacy , per informazioni su come eseguire lentamente il refactoring del codice senza test in codice che può essere utilizzato con strumenti di test tradizionali (e di simulazione)