2009-05-07 9 views
1

Essayer de faire fonctionner Nunit dans ASP.Net.Unité/Intégration Test du code utilisant HttpCurrentContext

Le problème est que je suis en train de tester un contrôle personnalisé - qui fait référence à une ressource globale.

Lorsque je tente de test unitaire, il

/// </summary> 
     [Test] 
     public void TestSetAndGetNumber() 
     { 
      PhoneNumber phone = new PhoneNumber(PhoneNumber.NumberType.Business, "", true, ""); 
      string expectedString = "1-800-Goat-Phone"; 
      string resultString = "1-800-Goat-Phone"; 
      resultString = phone.Value = resultString; 
      Assert.AreEqual(expectedString, resultString, "GetNumberMatch method returned unexpected result."); 
      Assert.Fail("Create or modify test(s)."); 
     } 

Je vais obtenir "ne peut pas charger App_GlobalResources".

Essayer de comprendre si peut-être je devrais essayer de simuler HttpContext Using You've been Haacked blog post mais personne n'a vérifié que c'est faisable.

Répondre

1

Il s'agit d'un scénario typique dans lequel vous devriez configurer votre classe de manière à être testable. Si vous avez une dépendance externe (références à une ressource globale), alors vous devriez en faire un résumé, donc vous pouvez vous en moquer.

Je vous suggère de jeter un oeil à ce book, et il explique comment concevoir votre classe soit plus testable. Alternative, vous pouvez télécharger des exemples de moq. La configuration des tests unitaires implique beaucoup de concevoir votre classe de manière plus souple, de sorte que vous puissiez la tester efficacement sans interaction avec DB/Système de fichiers/autre ressource.

+0

La classe testée est un contrôle personnalisé, PhoneNumber. Toutes les instances de numéro de téléphone nécessitent actuellement un appel à GlobalResources pour obtenir le texte de l'étiquette, etc. Je ne suis pas sûr de la façon dont vous recommanderiez de changer la classe pour pouvoir en tester certaines parties sans toucher GlobalResource. Si PhoneNumber utilisait une interface pour accéder à GlobalResources, je ne vois pas comment faire en sorte que le test d'unité change proprement cette interface pour renvoyer des données fictives. –

+0

Quel est votre objectif de test? vous voulez tester le contenu de la chaîne dans GlobalResource? Je suis un peu confus avec ce que vous voulez exactement tester? –

+0

une certaine logique dans le getter-setter. Je me rends compte que la réponse de certaines personnes à cela serait de ne pas avoir de logique dans le setter getter ... mais c'est la logique de type getter/setter (logique d'affichage). Je ne suis pas un grand fan d'avoir des interfaces qui fournissent peu de valeur d'un point de vue de modèle de conception. vraiment je voudrais juste simuler httpcontext dans le test unitaire, mais peut-être que je souhaite sur une étoile. –

1

Cela peut sembler flib, mais ne pouvez-vous pas simplement reconcevoir la classe PhoneNumber pour qu'elle soit testable?

Si vous souhaitez utiliser les tests unitaires, cela semble être la solution. Si vous ne pouvez pas modifier la classe PhoneNumber, à quoi bon le tester?

Questions connexes