2009-08-13 13 views
12

Stavo cercando altri modi per testare le applicazioni ASP.NET MVC e ho incontrato Steve Sanderson MvcIntegrationTestFramework. L'approccio sembra piuttosto promettente, ma mi chiedevo se qualcuno avesse qualche esperienza reale da condividere.Qualcuno ha usato M67IntegrationTestFramework di Steve Sanderson?

+0

Non l'ho ancora usato ma l'idea di disaccoppiare il browser dal test di integrazione è molto allettante. –

+0

Ma per me l'integrazione implica l'integrazione dei livelli. E il browser (in particolare javascript e ajax) è, in effetti, un livello che dovrebbe essere testato. –

+0

Ciao James. Ciò deve essere fatto sicuramente, ma in base alla mia esperienza è difficile automatizzare e, a causa delle differenze tra i browser, è necessario farlo per alcuni di essi. Quindi questa non è una sostituzione ma un'aggiunta ai test del browser. E utile per trovare regressioni. – Maurice

risposta

7

Sto ottenendo ottimi risultati. Non m'importa di quello che dicono gli altri qui sulla necessità di testare le viste, non appena si aggiunge la prima linea di codice a una vista, anche se il codice è strettamente correlato alla presentazione, si introduce un potenziale di errori per il quale sarebbe una buona idea scrivere test automatici. Il mio interesse principale è solo quello di catturare il maggior numero possibile di errori/schermo bianco e schermo giallo. Per farlo ho utilizzato il frammento dal post introduttivo di Steven per garantire che la pagina visualizzata correttamente senza gettare eccezioni:

Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html")); 

Le piccole insidie ​​che vedo con questo quadro potrebbe essere:

  • Se il tuo sito web sta eseguendo un collegamento di modelli piuttosto complesso tra le viste e i metodi di azione, potresti trovarti a creare alcuni NameValueCollections piuttosto grandi come in questo esempio (un metodo di azione che accetta un oggetto modello di vista LogonModel), poiché Non vediamo alcun modo di passare qualsiasi tipo di oggetto del modello di vista complesso nei tuoi metodi di azione usando questo framework:

var result = browsingSession.ProcessRequest("/account/logon", HttpVerbs.Post, new NameValueCollection { {"UserName","myName"}, {"Password", "myPassword"}, {"returnUrl", "/home/myActionMethod"} });

  • Esecuzione browsingSession.ProcessRequest ("URL") crea un'applicazione host/contesto che in realtà esegue il codice web che si sta verificando utilizzando la configurazione nel progetto che si sta testando. Ciò significa che i test funzionano un po 'lentamente e potrebbero eventualmente modificare i dati reali, dal momento che non vedo un modo semplice e veloce per sostituire i repository di accesso ai dati nel tuo progetto web sotto test con versioni false utilizzando qualsiasi funzione integrata in questo quadro di prova. In altre parole, probabilmente dovresti eseguire il rollover utilizzando alcuni metodi basati su web.config.
+0

Follow up - Consiglio vivamente di passare a MVC3 e utilizzare RazorGenerator. È possibile eseguire contemporaneamente MVC2 e MVC3, migrando singole pagine Web alla volta, che ho trovato che funzionano senza problemi. Sebbene il framework di Steve Sanderson funzioni bene all'interno dei limiti di MVC2, abbiamo trovato estremamente difficile gestire le modifiche ai percorsi dei file codificati che erano necessari quando si utilizzava il framework di test sulle nostre macchine di sviluppo rispetto alla nostra C.I. server. Questo problema non esiste con RazorGenerator + MVC3. –

+1

Grazie per il seguito! Puoi spiegare in breve come RazorGenerator ti ha aiutato a sostituire MvcIntegrationTestFramework per i tuoi test di integrazione? In che modo la precompilazione delle tue visualizzazioni Razor può aiutarti? Forse lo hai scritto sul blog :-) – Oliver

0

Non ho usato questo framework. Ma sulla base della mia esperienza di lettura del suo libro - Pro ASP.NET MVC Framework e di un altro framework di validazione xVal che ha sviluppato, direi "LUI È GRANDE".

+0

Mi piace molto anche il suo libro. In effetti ho una copia accanto a me in questo momento. – Maurice

0

Sperimentato un po 'e potrebbe essere molto utile in alcune situazioni. General thumbs up e se ho visto ulteriori lavori su di esso vorrei utilizzare su un progetto futuro.

Non procedere come già impostato WatIn e aver cura di alcune cose che non vorrei affrontare di nuovo in questo contesto. Per esempio. autenticazione tramite una finestra di dialogo, che probabilmente richiederebbe un cambio di codice.

1

Dopo aver letto ardave's answer qualche tempo fa, ci siamo andati di provarlo per noi stessi per la nostra nuova applicazione basata Orchard Marinas.info.

Prima di tutto, consiglio a chiunque di iniziare da un fork di this version in quanto è ancora più semplice da configurare rispetto all'originale.

Per qualsiasi "normale" app MVC3 funziona semplicemente. Sfortunatamente, insieme a Orchard non ha funzionato bene, almeno non con una versione non modificata del loro Global.asax.cs. Quindi siamo ancora andati su browser based testing road ma continuiamo ad usarlo per eseguire i comandi di Orchard all'interno dell'app che è abbastanza veloce.

Problemi correlati