Come testare un sito di moduli Web? Mi sembra che tanto dipende dallo stato e dall'input dell'utente, non sarebbe fattibile.
Se non è possibile, esiste un'alternativa automatica valida?
Come testare un sito di moduli Web? Mi sembra che tanto dipende dallo stato e dall'input dell'utente, non sarebbe fattibile.
Se non è possibile, esiste un'alternativa automatica valida?
Risposte:
Si, puoi. Devi solo stare attento a separare bene le tue preoccupazioni. In breve, devi rimuovere tutta la tua logica dal code-behind e inserirla in altre classi.
Esistono due modi comuni per farlo.
Il modo semplice è ripensare tutti i gestori di eventi in termini di "Quali informazioni mi fornisce il sistema? Quali informazioni sono necessarie per popolare sulla pagina?" e quindi fornire una classe di servizio che esegue quella conversione.
In questo caso, il livello di servizio dovrebbe conoscere molto poco la natura del livello di presentazione. Devi ancora prendere i dati restituiti dal servizio e popolare i componenti corretti di WebForm nel tuo code-behind e questo rimane non testato (almeno dai test unitari, puoi ancora impiegare test di integrazione). Ma questo è raramente dove il codice va storto, è molto più probabile che fallisca nella logica.
Un modo più complicato, ma più efficace, è utilizzare il modello Presentazione modello . Quando l'abbiamo provato, abbiamo scoperto che i Presenter si sono rapidamente accoppiati al framework e, più abbiamo sviluppato MVP, più era chiaro che MVP voleva davvero essere MVC ma non poteva esserlo.
Detto questo, altri lo hanno fatto con grande successo - esiste anche un framework webformsmvp disponibile per rimuovere il sollevamento pesante - quindi il tuo chilometraggio può variare.
Ovviamente, un'intera pagina di moduli web non è un'unità e quindi non può essere testata. Tuttavia, ci sono alcune cose che puoi fare per i test automatizzati:
Mi dispiace per aver perso la parte "unit" della domanda ...
SeleniumHQ è il tuo amico per i test front-end. Non è un test unitario, più simile a un test in scatola nera. Devi ancora pensare a casi di test validi ...
Parlando per esperienza: solo se è fatto bene. Per "giusto" intendo il code-behind minimo e qualcosa come il summenzionato Model-View-Presenter per rendere "stupido" il modulo Web. Questo di solito si rivela molto difficile con le applicazioni brownfield perché non sono state progettate pensando a questo ed è uno sforzo quasi erculeo per riformattare / riscrivere le pagine per usarlo.
Trovo che i web test delle unità siano estremamente utili, anche solo per dare un'idea generale di un bug di regressione o per nuovi progetti.
Per quanto riguarda lo stato, crei i test unitari come faresti con i test non UI: cancellano il database all'inizio del test e ricostruiscono il database in modo che non contenga altro che lo stato iniziale. Ogni unit test incapsula quindi una singola pagina, o di solito un'attività distinta su una pagina.
http://watin.org/ è un altro strumento di test web ma per C # /. NET. Scrivi i test come unit test:
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
Attualmente è basato su IE ma ha un supporto sperimentale per Firefox e Chrome. Puoi praticamente automatizzare tutto ciò che faresti nei test manuali, inclusa l'interazione Javascript.
Non è possibile testare l'unità di un sito Web, semplicemente perché le richieste Web si verificano su un cavo (o tramite uno stack TCP). Pertanto, i test non corrispondono alla definizione di "unit test", sarebbero probabilmente test end-to-end.
Per questo tipo di test, è possibile utilizzare una suite come Selenium che esegue un browser Web dietro le quinte. Un avvertimento però: di solito questo tipo di test è molto difficile e imprevedibile, poiché ci sono molte parti mobili!
Più interessante, però, mi preoccupa un po 'perché si avrebbe bisogno di a prova moduli web a tutti. Non stai mettendo troppa logica nel codice dietro e hai una logica aziendale anemica per caso?
Negli ultimi 5 anni Jasmine è emerso come uno strumento chiave per i test delle unità front-end. È spesso incorporato nei test di build automatici con Node e npm
Per https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
Jasmine è un framework di test open source per JavaScript. [2] Mira a funzionare su qualsiasi piattaforma abilitata per JavaScript, a non intromettersi nell'applicazione né nell'IDE e ad avere una sintassi di facile lettura. È fortemente influenzato da altri framework di test delle unità, come ScrewUnit, JSSpec, JSpec e RSpec. [3]
Nonostante tutte le menzioni di javascript, può anche essere usato per test unitari di un semplice modulo web.
Durante lo sviluppo di un sito ASP.NET siamo stati in grado di eseguire unit test su:
È possibile TDD tutto questo, a seconda della propria architettura. L'unica cosa che non è possibile testare l'unità è il layout del file di markup.