Question

J'ai un cadre tiers que j'utilise pour écrire un document Excel et que l'utilisateur le télécharger.

Le problème est que l'utilisateur tente d'exporter un grand nombre d'enregistrements, et il lancer une OutOfMemoryException.

Je suis en train d'écrire un test pour vérifier que cela se produit dans le cadre d'un tiers et non dans mon code, mais la méthode Save prend un objet HttpResponse comme l'une des méthodes.

Comment puis-je obtenir / maquette / whatever pour passer un objet HttpResponse?

Exemple d'utilisation:

excel.Save("test.xls", 
    OpenType.OpenInExcel, 
    FileType.Excel2003,
    HttpContext.Current.Response);

Il est évident que la HttpContext.Current.Reponse ne fonctionne pas dans un test unitaire, donc mon problème.

Était-ce utile?

La solution

[Disclaimer: Je travaille à Typemock]

Vous n'avez pas besoin d'avoir un objet HttpResponse réelle au lieu d'utiliser Isolateur pour créer un faux par exemple de type HttpResponse et revenir quand HttpContext.Current.Response est appelé:

var fake = Isolate.Fake.Instance<HttpResponse>();
Isolate.WhenCalled(() => HttpContext.Current.Response).WillReturn(fake);

Vous pouvez définir les propriétés de l'objet faux et changer son comportement en utilisant Isolate.WhenCalled .

Le mérite de cette approche est que vous n'avez pas besoin de définir un environnement complexe, en fait, vous pouvez utiliser ce code à l'intérieur d'un simple test unitaire.

Autres conseils

Le HttpRequestBase de .Net 3.5 SP1 est conçu à cet effet, mais il ne fera aucun bien à moins que le code tiers utilise. (Il est une fonction de remplacement dans il est donc pas difficile à utiliser)

Si l'autre code ne l'utilisez pas, vous pouvez essayer d'hébergement dans le code Cassini et lui demandant sur HTTP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top