Il mio attuale progetto basato su Asp .net fa un uso considerevole dei gestori di HTTP per elaborare varie richieste? Quindi, c'è un modo in cui posso testare la funzionalità di ciascuno dei gestori usando i casi di test unitario? Stiamo utilizzando il framework Nunit e Moq per facilitare il test delle unità.Unità che controlla i gestori HTTP?
risposta
Sicuro, anche se non mi sono fatto "con rabbia".
Utilizzare System.Net.WebClient per effettuare chiamate HTTP verso i gestori e valutare cosa ritorna, che consentirà di testare l'interfaccia pubblica del gestore.
In questo esempio ho codificato il mio target e sto utilizzando un metodo sul WebClient che restituirà una stringa.
Il WebClient consente inoltre di accedere a ResponseHeaders, Encoding e altre utili risorse "webby"; puoi anche caricare informazioni.
using System.Net;
namespace UnitTestHttpHandler
{
public class TestHarness
{
public static string GetString()
{
WebClient myWebClient = new WebClient();
return myWebClient.DownloadString("http://localhost/Morphfolia.Web/ContentList.ashx");
}
}
}
è quindi possibile utilizzare il TestHarness per chiamare il bersaglio HttpHandler e verificare i risultati nei test (o usare un approccio migliore per il test se si conosce uno - io non sono un guru di test unit).
[TestMethod]
public void TestMethod1()
{
string x = UnitTestHttpHandler.TestHarness.GetString();
Assert.IsTrue(x.Length > 5);
}
Ecco un articolo che spiega chiaramente il test dell'unità per il gestore HTTP.
http://jgvimalan.wordpress.com/2011/08/30/unit-test-for-http-handler/
Si può fare test di integrazione del gestore utilizzando i metodi di cui le altre risposte, fare Unit Testing è necessario creare alcune interfacce ed estrarre le funzionalità di base fuori del gestore, così come crea alcuni oggetti finti.
Non sarà in grado di unit test tutte le parti di esso perché si basa su risorse esterne (quelle sarete prendendo in giro) - ma va bene, questo è per questo che abbiamo test di integrazione.
Credo che queste voci di blog da un po 'indietro sono rilevanti:
http://www.kongsli.net/nblog/2009/05/03/aspnet-35-improving-testability-with-systemwebabstractions/
vedi esempio # 2 nel primo post per un esempio su come unit test un HttpHandler.
Se si desidera testare la comunicazione tra i gestori e l'interfaccia utente Web, allora sì, il test di integrazione è la soluzione giusta. Al fine di testare la tua logica, non potresti invece separare la tua business logic in altre classi (io userei un assembly separato per il livello aziendale) e mock/unit testare queste classi al di fuori del tuo livello di presentazione?
Una volta che un livello aziendale strutturato (e testato unitamente) è stato separato dal livello di presentazione, i gestori possono semplicemente istanziare i calcestruzzi e invocare i metodi forniti. Una volta eseguita questa operazione, è possibile passare ai test di integrazione poiché la logica aziendale sarà stata sottoposta a test dell'unità.
Se non cura di test di unità e volete qualcosa di veloce e sporco è possibile utilizzare Fiddler
se si desidera un approccio (Unit testing) più integrato è possibile utilizzare il WebRequest e WebResponse.
- 1. Unità di lavoro/gestori repository per NHibernate?
- 2. Gestore di FileServer con altri gestori HTTP
- 3. Gestori di messaggi e il modulo Http?
- 4. Gestori Http personalizzati IIS7 e ASP.NET
- 5. Come impilare i gestori di autenticazione Plack?
- 6. Server HTTP per i test delle unità in Delphi
- 7. Unità che verifica una direttiva AngularJS che controlla un attributo con ambito isolato
- 8. Javascript: controlla l'ordine in cui i gestori/ascoltatori di eventi vengono eseguiti in
- 9. Come utilizzare i gestori HTTP per i percorsi selezionati e il gestore MVC per il resto?
- 10. jquery che attiva i gestori di eventi "on" e "off"
- 11. Test delle unità richieste HTTP in C#
- 12. CA1009: dichiarare correttamente i gestori di eventi?
- 13. Rimozione di gestori HTTP inutilizzati per prestazioni e sicurezza migliori
- 14. Gestori HTTP e bundle javascript in VS 2012
- 15. Instrumentation.ActivityMonitor che non controlla Intent.ACTION_CALL
- 16. Servizio Android che controlla MediaPlayer
- 17. TCL come chiamare i gestori di articoli
- 18. Android: perché i gestori pubblicano un eseguibile?
- 19. Controlla se una stringa inizia con http utilizzando Javascript
- 20. Quando collegare i gestori di eventi asp.net
- 21. controlla i suggerimenti di simple_form
- 22. In che modo i controlli WPF integrati gestiscono i gestori di eventi su un evento collegato?
- 23. I gestori di eventi sono garantiti per il completamento prima che vengano richiamati i callback AJAX?
- 24. Laravel Basic HTTP Auth Controlla Restituzione di False
- 25. stripe api che controlla la carta esistente
- 26. Ruoli e gestori ansible - non possono ottenere i gestori di ruolo per lavorare
- 27. Maven Checkstyle: Controlla che non funzioni
- 28. unità di prova di un metodo che restituisce un vuoto
- 29. jQuery: Funziona Ajax entrambi i gestori - fatto e non riescono
- 30. Elenca gestori attivi in boost io_service
Ma abbiamo bisogno di instradare (usando i file di configurazione) la richiesta al gestore corretto e anche il server deve essere in esecuzione, giusto? Quindi, come simularlo? –
Sì, un server web deve essere in esecuzione. Per quanto riguarda la configurazione, non posso parlare per esperienza, ma supponevo che sarebbe stato fatto in modo simile a specificare altre impostazioni via config quando test di unità (?). Scusa, non posso offrire molto di più. –
Questo funziona davvero bene, l'unico problema è che non è possibile eseguire il debug attraverso il gestore di destinazione, naturalmente. – Brent