Come posso creare Assert.AreEqual (myobject, somevariable) un test in TDD prima di scrivere il codice di produzione?

5

Sto facendo ricerche su TDD, non sono sicuro di come scrivere un test prima di aver scritto il codice di produzione. Il problema è che TDD afferma che tu fai asserzioni e poi scrivi il tuo codice in modo che queste asserzioni passino. Ma non hai ancora creato alcuna classe (come parte del codice di produzione) quindi come intendevi scrivere i test se non hai alcuna classe con cui affermare.

Spero che qualcuno possa spiegare ....

    
posta Pete2k 14.12.2011 - 12:30
fonte

4 risposte

9

Il primo errore che il test espone è che l'utilizzo dell'API non viene compilato, perché la classe non esiste.

Quindi lo aggiusti in modo che il test venga compilato.

Quindi probabilmente fallirà perché il codice di produzione non fa quello che richiede il test.

Quindi implementa solo abbastanza della classe per farla passare.

Quindi richiedi un comportamento più sofisticato nel tuo test.

Ripeti ancora e ancora.

(Nota: questa è la versione ortodossa e hardcore del TDD.) Le opinioni divergono sul fatto che sia davvero necessario iniziare con un test deliberatamente non compilabile, o quanto codice commerciale scrivere tra le iterazioni. -5 linee è sempre troppo, altre sono più variabili.)

    
risposta data 14.12.2011 - 12:34
fonte
2

Probabilmente inizierai con un test che istanzia solo una classe. Il compilatore emetterà un errore perché la classe non esiste (rosso). Per fare in modo che il test abbia successo devi creare la classe da testare. Il compilatore eseguirà ora il test (verde). Ora puoi, ad esempio, chiamare un metodo inesistente. Il compilatore si lamenterà (rosso). Crea il metodo nella classe, il compilatore smetterà di lamentarsi (verde). Inserire un'asserzione nel test per il metodo. Il test fallirà (rosso). Estendi il metodo in modo che l'asserzione funzioni. Il test verrà eseguito (verde).

    
risposta data 14.12.2011 - 12:35
fonte
2

A seconda della lingua e dell'IDE che stai utilizzando, potresti avere il supporto per lo "sviluppo consumer-first".

es. in Visual Studio, puoi scrivere questa riga di codice:

NewObjectThing foo = new NewObjectThing();

Ora otterrai gli squigglie rossi per indicare che il tipo o lo spazio dei nomi NewObjectThing non può essere trovato, e ovviamente il codice non verrà compilato.

Ma se fai clic destro su di esso e seleziona Genera - > Class, creerà un nuovo file NewObjectThing.cs nella stessa cartella & namespace come codice corrente, con una dichiarazione di classe vuota per NewObjectThing .

Allo stesso modo, se hai scritto allora:

foo.Name = "Fred";

.. puoi quindi fare clic con il pulsante destro del mouse su Name e selezionare Genera - > Proprietà per aggiungere una proprietà alla classe NewObjectThing (e inferirebbe il tipo come string in base a ciò che gli stai assegnando).

Esistono strumenti aggiuntivi come Resharper e CodeRush che aggiungono notevole flessibilità e potenza a questo processo.

Ad ogni modo, dai un'occhiata se il tuo IDE supporta qualcosa di simile.

    
risposta data 15.12.2011 - 04:12
fonte
1

Un altro motivo per scrivere un test prima che il codice che sta testando sia scritto è assicurarsi che il test fallisca. Questo assicura che tu stia effettivamente chiamando il test e che non fallisca. Certo, è improbabile che potremmo mai sbagliare, ma .....

    
risposta data 15.12.2011 - 08:28
fonte

Leggi altre domande sui tag