Domanda

Sono solo iniziando a fare Test Driven Development, e mi chiedo le principali differenze tra RhinoMock, TypeMock e NUnit di built-in di scherno?

Qualsiasi informazione sarebbe molto apprezzato!

È stato utile?

Soluzione

TypeMock è un prodotto commerciale (il che significa che dovrete pagare per questo), ma vi permetterà di deridere gli oggetti concreti - a differenza RhinoMocks / NUnit / MoQ che può deridere solo una classe di interfaccia / astratta. Come raggiunge questo è magia nera borderline, ma lo fa alcune cose molto intelligenti con il CLR.

Questo può essere particolarmente utile quando si utilizzano le librerie nel progetto che non utilizzano molte interfacce. Così si potrebbe, ad esempio, utilizzare TypeMock per deridere un DataContext LinqToSql, o oggetti di SharePoint. Tuttavia, se si utilizza TypeMock questo è nessuna scusa per cattiva progettazione nella vostra applicazione .

Per quanto ne sono a conoscenza, a parte le differenze di sintassi minori, la maggior parte dei quadri beffardi si sono allontanati dal vecchio modello di registrazione / riproduzione. Comunemente, si impostano le deride scrivendo aspettative utilizzando un'interfaccia fluida.

Personalmente, ho usato solo MoQ e I <3 esso.

Altri suggerimenti

Un video chiamato TDD - Comprendere oggetti mock di Roy Osherove è molto utile per imparare le differenze delle diverse librerie beffardi. Lui non va in grande dettaglio di ogni aspetto, ma abbastanza per voi capire. Spero che questo possa essere d'aiuto. Roy è anche il Chief Architect per TypeMock ed è una figura molto influente nell'arena unit testing. Non potrei consigliare questo video sufficiente per chi vuole imparare a utilizzare beffardo e anche conoscere la biblioteca a disposizione.

La differenza principale tra TypeMock e la libreria open-source è che TypeMock utilizza l'API Profiler fornito da Microsoft al posto di un dinamica procura . Questo permette TypeMock per deridere classi concrete e metodi statici. Nel caso in cui non si è sicuri che cosa il profiler è, è la stessa API che viene utilizzato da strumenti come dotTrace di JetBrain e profiler Formiche .Net di Redgate. TypeMock solo utilizza l'API in un modo diverso di falsi (finto) che cosa si dice di.

@RichardOD, grazie per il promemoria, il suo libro " The Art of Unit Testing " va in più in dettaglio in cui il video non lo fa. Possiedo il libro ed è molto istruttivo.

  • Rhino.Mocks è un open source, continuamente sviluppato e migliorando quadro da uno degli sviluppatori più prolifici del settore. E 'stato intorno per un po' e quindi supporta un bel paio di paradigmi differenti per beffardo. Può essere un po 'più difficile da imparare, pertanto, nel senso che si potrebbe trovare tutorial per il "vecchio" modo di fare le cose. Ecco un suggerimento, SetUpResultFor () e Expect.Call () sono i vecchi modi di fare le cose. Il nuovo modo è mockObject.AssertWasCalled () .

Non ho avuto alcuna esperienza personale con questi altri, ma ...

  • MOQ è un open source, continuamente sviluppato e migliorando quadro da uno degli sviluppatori un po 'meno prolifici del settore (rispetto al Ayende). E 'più recente e quindi manca di alcune caratteristiche che Rhino.Mocks ha. Questo di solito non è un problema dal momento che queste caratteristiche tendono ad essere quelli che sono un po 'obsoleti in Rhino. Ho sentito dire che a causa di questo è un po 'più facile da imparare (quadri di scherno non sono difficili da imparare a proposito).
  • NUnit Mocks è molto caratteristico per quanto beffardo va. Non supporta la sintassi Disporre-Act-Assert attualmente preferito basandosi invece su Expect-Verify (registrazione / riproduzione). Essa si basa anche sulle stringhe di individuare metodi e delle proprietà nomi invece di lambda. Questo rende molto resistente al refactoring. Questo è un problema serio. Io non lo consiglio.
  • TypeMock Isolater è un hardcore-pay beffardo quadro da una società (di proprietà di?) Roy Osherove - un ragazzo che conosce il suo test, ma ha anche alcune opinioni lievemente controverse su come applicarla. E 'davvero intenso quanto quello che può fare - scendendo al livello basso e modificando come CLR oggetti di lavoro. La filosofia alla base TypeMock in realtà non è al 100% TDD comunque. Parte dei benefici del TDD è che abbracciando i limiti del quadro beffardo si progettare codice migliore. TypeMock blasti tali limitazioni pezzi. Per quanto ne so è in gran parte utilizzato da persone che stanno cercando di ottenere il codice non hanno alcun controllo su in prova.

Io uso TypeMock tutto il tempo e ho trovato ad essere uno strumento molto potente che può migliorare la copertura del mio test di unità. Questo è perché io lavoro con SharePoint e solo TypeMock posso permettermi di deridere le classi SharePoint -. Dal momento che sono classi concrete e non interfacce

derisione classi di SharePoint non è possibile con RhinoMock, Moq, NUnit, ecc dal momento che (credo) hanno bisogno di interfacce per deridere gli oggetti, piuttosto che essere in grado di prendere in giro le classi concrete attuali.

Se il codice fa uso di un sacco di interfacce, e non si richiede beffardo classi concrete, allora TypeMock è un po 'costoso, ma per la potenza si ottiene, ne vale la pena.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top