Wednesday, June 16, 2010

Sharepoint and Mocking!!!

Sempre più preso dall’usare Rhino.Mocks per i propri test (a causa di Ughetto; prima facevo le mie classi di mocking), ho iniziato a guardare in giro quale sarebbe il migliore framework per mocking su Sharepoint, perchè Rhino non fa quel che ho più di bisogno: moccare classi sealed e costruttori internal.
Chi ha provato a mockare dei progetti web sa bene che “problemi” si possono avere con i vari HttpContext etc.
Nel mondo Sharepoint abbiamo gli stessi problemi con, l’SPContext, SpList … in più abbiamo poche interfacce e molti metodi/proprietà static.
Ecco allora che abbiamo poche soluzioni applicabili:
  1. Implementare interacce/classi che wrappano gli oggetti di Sharepoint
  2. Usare un framework di mocking
  3. Usare Doubler

Il punto 1 è quello che facevo e avrei continuato a fare senza l’ausilio dei framework di mocking.
Prendete una classe la mocchiamo a manina e vediamo se il codice che scriveremmo a contorno funziona:
  • PRO
    Non devo impare a usare un framework
  • CON
    Devo scrivere tanto codice!!!

Il punto 2 è quello più interessante, anche perchè abbiamo un pò di framework di testing da poter usare.
Il primo che mi viene in mente è Rhino.Mocks, ma come ho scritto su non è utile con Sharepoint perchè dovremmo scrivere tutte le interfacce necessarie per wrapparne gli oggetti.
Altre due mi vengono in mente: TypeMock e Moles + Pex.
Anche quì abbiamo pro è contro…
TypeMock:
  • PRO
    Mocca l’impossibile, anche le mozzarelle di bufala e adesso c’è anche la licenza TypeMock Isolator 2010 for Sharepoint developers che comunque costa un botto e, rispetto alle altre versioni, non ha nulla: http://site.typemock.com/comparison-matrix/
    Rimane il fatto che, ad oggi, è la più completa… ad oggi
  • CON
    Costa e non poco
Moles e Pex:
  • PRO
    Mocca gli oggetti sealed e i costruttori  internal
    Pex genera test cases dopo aver analizato il codice in test (mooolto comodo)
  • CON
    Microsoft ancora non ne garantisce il supporto

Doubler è un addin di reflector sviluppato da Jay Flowers, ottimo per creare stub: http://code.google.com/p/doubler/

Personalmente ho sempre visto di buon occhio TypeMock e ultimamente l’ho provato.
Ma visto il costo non ho voluto aprofondirne la mia conoscenza.
Invece sempre più proverò ed usero Moles + Pex per i miei progetti, rimanendo a Rhino per Dexter.
Cips
0xb4627233, 0x5e70, 0x4219, 0x95, 0x9e, 0x1, 0x63, 0x5e, 0x6b, 0x3f, 0xae

1 comment:

  1. Imported comment, original author: Andrea Saltarello

    TypeMock l'ho visto nascere e nel 2003/2004 lo usavo perché la versione "personal" era gratuita: oggi sarebbe difficile convincere un cliente a spendere quella cifra per *ogni* dev. Negli ultimi (quasi) 2 anni, la mia "combo" è MSTest+Moq, Pex è interessantissimo (ma non ho ancora avuto modo di provarlo seriamente su un progetto vero) e incrocio le dita per Moles :-)

    ReplyDelete