2010-04-20 2 views
2

Je vous écris quelques tests unitaires et je reçois une exception levée de mon code réel lorsque vous essayez de faire ce qui suit:C# Unité Visual Studio de test, Mocking une adresse IP du client

string IPaddress = HttpContext.Current.Request.UserHostName.ToString(); 

Y at-il un façon de simuler une adresse IP sans réécrire mon code pour accepter l'adresse IP en tant que paramètre?

Merci!

Répondre

5

Jetez un oeil à Dependency Injection. Fondamentalement, vous contourner ces problèmes en poussant les données dans une classe avec (par exemple dans ce cas) une classe "contexte" ou "paramètres". Vous avez alors une implémentation prod qui fait le vrai et un simulacre ou faux dans vos tests.

public class AppContext : IAppConext 
{ 
    public string GetIP() 
    { 
    return HttpContext.Current.Request.UserHostName.ToString(); 
    } 
} 

Le contexte de l'application est poussé dans la classe en utilisant l'adresse ip ...

Oh- et pour autant que je sache, il n'y a pas pour toutes les moqueries intégré éditions VS, vous devrez vérifier l'un des nombreux - Rhino mocks, Moq ... il y en a beaucoup! Voir aussi typemock mais il faut une approche différente.

PK :-)

+0

Ouais je sais l'injection de dépendance, je voulais juste éviter d'avoir à changer mon code existant :( – Jimmy

+0

Il est de type faux - http://site.typemock.com/ - mais je Je ne l'ai jamais utilisé, j'ai toujours eu le temps de changer le code! ;-) –