Come faccio a testare un quadro terza parte, quando ho bisogno di passare in un HttpResponse
-
20-09-2019 - |
Domanda
Ho un framework di terze parti che sto usando per scrivere un documento di Excel e che l'utente scaricarlo.
Il problema è che l'utente sta tentando di esportare un numero elevato di record, ed è lanciando un OutOfMemoryException.
Sto cercando di scrivere un test per verificare che questo sta accadendo nel quadro di terze parti e non nel mio codice, ma il metodo Save prende un oggetto HttpResponse come uno dei metodi.
Come posso ottenere / finto / qualunque cosa un oggetto HttpResponse di passare?
uso Esempio:
excel.Save("test.xls",
OpenType.OpenInExcel,
FileType.Excel2003,
HttpContext.Current.Response);
Ovviamente il HttpContext.Current.Reponse non funziona in una prova di unità, da qui il mio problema.
Soluzione
[Disclaimer: io lavoro a Typemock]
Non è necessario disporre di un oggetto reale HttpResponse invece utilizzare Isolator per creare un falso esempio di tipo HttpResponse e restituirla quando viene chiamato HttpContext.Current.Response :
var fake = Isolate.Fake.Instance<HttpResponse>();
Isolate.WhenCalled(() => HttpContext.Current.Response).WillReturn(fake);
È possibile impostare le proprietà sull'oggetto falso e modificare il suo comportamento con Isolate.WhenCalled .
Il merito di questo approccio è che non è necessario impostare un ambiente complicato, in realtà è possibile utilizzare questo codice all'interno di un semplice test di unità.
Altri suggerimenti
Il HttpRequestBase da .Net 3.5 SP1 è stato progettato per questo scopo, ma non farà nulla di buono a meno che il codice di terze parti utilizza. (Si tratta di una sostituzione drop-in, quindi non è difficile da usare)
Se l'altro codice non lo usa, si può provare che ospita il codice Cassini e che ne facciano richiesta su HTTP.