Domanda

Io e un collega stiamo iniziando un nuovo progetto e stiamo tentando di sfruttare appieno TDD. Stiamo ancora cercando di capire tutti i concetti relativi ai test unitari e finora li basiamo principalmente su altri esempi.

Il mio collega ha recentemente messo in discussione il punto degli aiutanti della sintassi di NUnit e sto lottando per spiegare il loro beneficio (dal momento che non capisco da solo, a parte il mio istinto, dice che sono buoni!). Ecco un esempio di asserzione:

Assert.That(product.IsValid(), Is.False);

Per me questo ha perfettamente senso, stiamo dicendo che prevediamo che il valore di product.IsValid () sia false . D'altro canto, il mio collega preferirebbe che scrivessimo semplicemente:

Assert.That(!product.IsValid());

Gli dice che questo ha più senso e può leggerlo più facilmente.

Finora l'unica cosa su cui possiamo concordare è che è probabile che tu ottenga risultati più utili quando il test fallisce dal primo, ma penso che ci debba essere una spiegazione migliore. Ho cercato alcune informazioni sugli helper di sintassi ( http://nunit.com/blogs/? p = 44 ) e hanno un senso, ma non capisco perfettamente il concetto di vincoli se non quello di "sentirsi" bene.

Mi chiedo se qualcuno potrebbe spiegare perché utilizziamo il concetto di vincoli e perché migliorano gli esempi di test unitari sopra?

Grazie.

È stato utile?

Soluzione

Penso che abbia principalmente a che fare con la pura lettura inglese della dichiarazione.

Le prime letture

  

Asserire che il prodotto è valido è falso

La seconda legge

  

Asserire che non è un prodotto valido

Trovo personalmente il primo più facile da elaborare. Penso che sia davvero tutto da preferire. Alcuni dei metodi di estensione disponibili sono interessanti, ma ti consentono di fare affermazioni come questa:

product.IsValid().IsFalse();

Altri suggerimenti

Vedo che la tua versione è migliore dei tuoi colleghi. Tuttavia, sarei comunque a mio agio con almeno:

Assert.IsFalse(product.IsValid());

Se riesci a convincermi che la sintassi Assert.That ha un vantaggio oggettivo rispetto a quanto sopra, sarei molto interessato :) Potrebbe benissimo essere un'abitudine, ma posso facilmente leggi " Che tipo di affermazione stiamo facendo? Ora di cosa stiamo affermando? & Quot; stile.

È tutto zucchero. Internamente vengono convertiti in vincoli.

Da Pragmatic Unit Testing, pg 37:

"NUnit 2.4 ha introdotto un nuovo stile di asserzioni che sono un po 'meno procedurali e consentono un'implementazione sottostante più orientata agli oggetti. ... Ad esempio:

Assert.That(actual, Is.EqualTo(expected));

Converte in:

Assert.That(actual, new EqualConstraint(expected));"

L'uso dei vincoli consente anche di ereditare da Vincolo e creare i propri vincoli personalizzati mantenendo una sintassi coerente.

Non mi piace Assert, questo, in particolare il fatto che il suo scenario più comune (confrontando l'uguaglianza di due oggetti) è decisamente peggiore della sintassi "classica" di Assert.AreEqual ().

D'altra parte, adoro le estensioni di MSpec NUnit. Ti consiglio di dare un'occhiata (o guardare le estensioni SpecUnit, o le estensioni NBehave, o N Comportarsi Spec * Estensioni unità, penso che siano tutte uguali).

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