Domanda

Nel libro di Roy Osherove [Unit Testing] [1] libro, spiega che un singolo test di unità dovrebbe contenere tra 0 e 1 schernisce. Egli suggerisce che se il test non sta affermando sul finto, allora non usare un modello a tutti. Egli dimostra inoltre come utilizzare un quadro di isolamento per la produzione di matrici, che sono stati creati in modo simile ai mock. Egli pone alcun limite suggerito al numero di stub creati per test.

La mia domanda è questa: possono queste raccomandazioni essere applicati a tutte le strutture di isolamento (o tutti i più diffusi framework C #)? In altre parole, c'è un quadro che può generare solo prende in giro - non stub? C'è un quadro di isolamento che non distingue prende in giro da mozziconi?

Sono solo curioso quanto sia facile raccomandazioni Osherove possono essere convertiti in standard di codifica.

[1]: http: // il sistema in prova non è nemmeno in fase di sperimentazione a tutti, invece dati restituiti da deride è ciò che è in fase di test.

È stato utile?

Soluzione

Ci sono framework come Moq che non li contraddistinguono. FakeItEasy va ancora oltre e chiama tutto gli oggetti contraffatti.

Sì, può essere applicato, perché deride sono stub solo più intelligenti. Non importa più di tanto se stub viene chiamato come finta finché Lei non fa affermare a più di una finta. Tale raccomandazione in altre parole è più affermando una sola cosa per test. Esplicitamente distinguendo deride e mozziconi non è poi così importante.

Altri suggerimenti

Questo corrisponde direttamente alla raccomandazione di Osherove che si eseguono solo un'assert per test. Nel suo lessico un stub è una classe che fornisce l'input falso per il sistema in prova, mentre un mock è una classe che consente di uscita di test del sistema in prova (con una classe di falso).

Se un quadro utilizza una simile convenzione di denominazione è all'altezza dei suoi progettisti, ma lo standard (se siete d'accordo con la sua raccomandazione) dovrebbe essere che una sola asserzione viene eseguito per test, e dove l'affermazione richiede un oggetto falso - che solo un oggetto falso dovrebbero essere testati per test.

Naturalmente, non tutti sono d'accordo con la sua raccomandazione, quindi non tutti lo fanno in questo modo.

Philip Calçado recentemente ha scritto su questo: http://fragmental.tw/2010/12/14/one-mock-per-test-considered-not-awesome/ . In breve, dice che concentrarsi su quanti deride / stub ci sono nel vostro test che le deviazioni da quello che dovrebbe essere la preoccupazione principale: scrivere buoni specifiche

.
> can those recommendations 
> [a single unit test should contain between 0 and 1 mocks] 
> be applied to all isolation frameworks ?

penso: La maggior parte del tempo se si assume queste definizioni

  • unittest = Test in isolamento (altrimenti non è un unittest)
  • Un'unittest per una caratteristica
  • uno stub o falso è un oggetto per consentire l'isolamento, ma che non ha alcuna funzione di verifica e
  • un mock è uno stub con funzionalità extra che permette anche la verifica

io uso il mio Moqfor Mocking farlo qui

Non sono sicuro di cosa esattamente vuoi dire di "sradicamento", ma suppongo che è probabilmente qualcosa come Moles from Microsoft che è piuttosto fresco. Qui

Entrambi sono davvero interessanti e molto facile da utilizzare.

Questa sorta di regola dovrebbe essere visto come "rotelle di addestramento". Ovviamente, un test che comprende molti stub e schernisce ha perso la bussola, ma insistendo su un'affermazione o aspettativa per test è troppo restrittiva. Come sottolinea il legame Calçado riferimento, ciò che conta è che c'è un concetto per test, che potrebbe comportare un paio di affermazioni o le aspettative per fare il punto. L'ultima cosa da fare è far rispettare tali norme.

Una cosa di più, abbiamo davvero dovrebbe parlare di "aspettative" qui, interazioni individuali, piuttosto che interi oggetti mock. In pratica, sono spesso la stessa, ma confonde i concetti.

Io uso Rhino finto per la mia prova in C #. È possibile generare deride o stub con esso. vi incoraggio a dare un'occhiata a questo quadro: http://www.ayende.com/ progetti / rino-mocks.aspx

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