Verificare che un attributo non esista non può fallire quando si scrivono test prima del codice

5

Mi è stato insegnato a seguire il pattern Referee Red- > Greeen- > quando esegui TDD. Ci sono state situazioni in cui questo modello non è stato tuttavia applicabile.

Ad esempio, un test per assicurarsi che un metodo di azione del controller (ASP.NET MVC) non disponga di un attributo Authorize. Poiché il test sta testando l'assenza di un attributo, passerà al primo passaggio, a meno che non venga aggiunto un attributo Authorize per far fallire il test.

Ciò che ho fatto finora durante il test dell'assenza dell'attributo Authorize è scrivere un test per questo, quindi aggiungere l'attributo Authorize solo per assicurarmi che il test funzioni effettivamente, quindi rimuovere immediatamente l'attributo Authorize.

Sto facendo qualcosa di sbagliato, o è solo così com'è; alcuni test passeranno a meno che non aggiungiamo intenzionalmente il codice per effettuare il fail e quindi rimuovere quel particolare codice?

    
posta user1323245 15.08.2014 - 19:29
fonte

1 risposta

12

Quindi la situazione è questa: il tuo metodo non ha un attributo Authorize. Perché hai bisogno di testare questo? Ci sono un numero infinito di asserzioni negative come questa che potrebbero essere fatte su qualsiasi entità data, tutte inizialmente vere. Se hai davvero bisogno di testare questo, è perché è un vero problema da qualche parte - da qualche parte qualcosa sta ottenendo oggetti con un metodo con un attributo Autorizza, e non dovrebbe farlo. Questo è il punto in cui introdurre il test. Non di punto in bianco. E questo è il punto - dove dici "questa cosa non può funzionare se viene consegnato un oggetto con un metodo con un attributo Autorizza". dove capisci cosa dovrebbe accadere se gli viene consegnato un oggetto del genere. Scrivi quel test. Non scrivere un test sul controller, che a sua volta è in realtà neutrale rispetto alla presenza o all'assenza dell'attributo. Scrivi il test intorno all'entità che si preoccupa sinceramente dell'attributo. Quindi fallo passare.

    
risposta data 15.08.2014 - 19:36
fonte

Leggi altre domande sui tag