Le migliori pratiche per l'integrazione di TDD con lo sviluppo di applicazioni Web?


26

Le unit test e le applicazioni Web ASP.NET sono un punto ambiguo nel mio gruppo. Il più delle volte, le buone pratiche di test cadono attraverso le crepe e le applicazioni web finiscono per andare in diretta per diversi anni senza test.

La causa di questo punto dolente ruota generalmente attorno al fastidio di scrivere lo sviluppo intermedio dell'interfaccia utente.

In che modo voi o la vostra organizzazione integrate le migliori pratiche TDD con lo sviluppo di applicazioni Web?

18

Le prove delle unità saranno ottenibili se voi separate i vostri strati in modo appropriato . Come suggerito da Rob Cooper, non inserire alcuna logica nel proprio Web Form diverso dalla logica per gestire la presentazione. Tutti gli altri elementi di logica e persistenza devono essere tenuti in classi separate e quindi è possibile testarli singolarmente.

Per testare la GUI alcune persone come selenium. Altri si lamentano che è un dolore da impostare.

+1

bene, forse Selenio un dolore per un po 'di istituire .. ma è per questo che gli altri hanno un posto di lavoro :) 13 lug. 152015-07-13 12:45:43


4

Strutturo l'applicazione e almeno il test dell'unità dal presentatore/controller (quale è la vostra preferenza, mvc/mvp) al livello dati. In questo modo ho una buona copertura di test sulla maggior parte del codice scritto.

Ho esaminato FitNesse, Watin e Selenium come opzioni per automatizzare i test dell'interfaccia utente, ma non ho ancora potuto utilizzarli in alcun progetto, quindi continuiamo con i test umani. FitNesse era quello a cui puntavo, ma non ho potuto introdurre questo e l'introduzione di TDD (questo mi rende cattivo? Spero di no!).


2

Questa è una buona domanda, una che sarò registrarmi troppo :)

Sono ancora relativamente nuovo al web dev, e anch'io sto guardando un sacco di codice che è in gran parte non testato.

Per quanto mi riguarda, continuo l'interfaccia utente più leggero possibile (di solito solo poche righe di codice) e testare la merda di tutto il resto. Almeno posso quindi avere una certa sicurezza che tutto ciò che lo rende all'interfaccia utente sia corretto come può essere.

È perfetto? Forse no, ma almeno è ancora abbastanza altamente automatizzato e il codice principale (dove accade la maggior parte della "magia") ha ancora una buona copertura ..


2

Una pratica comune è spostare tutto il codice che è possibile fuori dal codebehind e in un oggetto che si può testare isolatamente. Tale codice seguirà solitamente i modelli di progettazione MVP o MVC. Se cerchi su "Rhino Igloo" probabilmente troverai il link al suo repository Subversion. Quel codice merita uno studio, in quanto dimostra una delle migliori implementazioni MVP su Web Form che ho visto.

tuo codebehind volontà, quando si segue questo schema, fare due cose:

  1. Transit tutte le azioni dell'utente al presentatore.
  2. Dati di rendering forniti dal relatore.

L'unità di test del presentatore deve essere banale.

Aggiornamento: Rhino Igloo può essere trovato qui: https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/


0

Ci sono stati tentativi su come ottenere UI Automation gratuito di Microsoft (incluso nel .NET Framework 3.0) per lavorare con le applicazioni web (ASP.NET). Una compagnia tedesca chiamata Artiso sembra aver scritto un post sul blog che spiega come ottenerlo (link).

Tuttavia, il loro blogpost collega anche un Webcast MSDN che spiega il framework di automazione dell'interfaccia utente con winform e dopo aver dato un'occhiata a questo, ho notato che è necessario il AutomationId per ottenere un riferimento ai controlli rispettando. Tuttavia, nelle applicazioni Web, i controlli non dispongono di un AutomationId.

Ho chiesto a Thomas Schissler (Artiso) di questo e ha spiegato che questo era uno dei principali svantaggi di InternetExplorer. Ha fatto riferimento a una vecchia tecnologia di Microsoft (MSAA) e sperava a se stesso che IE8 lo avrebbe fatto meglio.

Tuttavia, stavo dando una prova anche a Watin e sembra funzionare piuttosto bene. Mi è piaciuta anche la Wax, che consente di implementare semplici test attraverso i fogli di lavoro di Microsoft Excel.


0

Ivonna può unità testare le vostre opinioni. Consiglio comunque di spostare la maggior parte del codice in altre parti. Tuttavia, alcuni codici solo appartengono allo, come riferimenti ai controlli o ai gestori di eventi di controllo.


2

Eviterei in genere il test che implica l'utilizzo di elementi dell'interfaccia utente. Sono a favore del test di integrazione, che verifica tutto dal livello del database fino al livello di vista (ma non al layout effettivo).

Provare ad avviare una suite di test prima del scrivendo una riga di codice effettivo in un nuovo progetto, poiché è più difficile scrivere test più tardi.

Scegli attentamente cosa testare - non scrivere scrupolosamente test per tutto. A volte è un compito noioso, quindi non renderlo più difficile. Se si scrivono troppi test, si rischia di abbandonare quell'attività sotto il peso di una manutenzione che richiede tempo.

Cercare di raggruppare il maggior numero di funzionalità possibile in un singolo test. In questo modo, se qualcosa va storto, gli errori si propagheranno comunque. Ad esempio, se si dispone di una classe che genera digest, verificare l'output effettivo e non tutte le singole funzioni di supporto.

Non fidarti di te. Supponiamo che commetterai sempre degli errori e così scriveresti dei test per semplificarti la vita, non più difficile.

Se non ti senti bene con i test di scrittura, si sono probabilmente facendo male;)