2010-03-18 6 views
0

Je suis en train de commencer à utiliser les tests unitaires et je veux tester le contrôleur suivant:Crashes premier test en utilisant MSTEST avec ASP.NET MVC 1

public class AjaxController: Contrôleur {

...

public JsonResult RateVideo(int userRating, long videoId) 
    { 

     string userName = User.Identity.Name; 

...}

}

J'ai créé un TestClass avec la méthode suivante:

[TestMethod TestRateVideo public void()

{    

     //Arrange 
     AjaxController c = new AjaxController(); 

     //Act 
     JsonResult jr = c.RateVideo(1, 1); 



     //Assert 
     //Not implemented yet 

    } 

je sélectionne debug et exécuter le test. Lorsque le code atteint la première déclaration:

string username = User.Identity.Name;

Le débogage s'arrête et un message m'indique que le test a échoué.

Tout conseil que vous pouvez offrir serait apprécié.

+0

Veuillez mettre en forme le code source –

Répondre

0

Le problème le plus courant lors du test des contrôleurs est l'utilisation de fonctions qui reposent sur HttpContext. La mise en œuvre de la propriété L'utilisateur est quelque chose comme:

public IPrincipal get_User() 
{ 
    if (this.HttpContext != null) 
    { 
     return this.HttpContext.User; 
    } 
    return null; 
} 

Comme vous pouvez le voir, l'utilisateur retourne null parce que le HtppContext n'a pas été initialisé et appelant .Identity lancera une exception. Heureusement, MVC vous permet de définir la propriété ControllerContext afin que vous puissiez créer votre propre instance avec un HttpContext mocké.

Le projet MVCContrib a quelques aides de test. Vous pouvez utiliser TestControllerBuilder dans MVCContrib.TestHelper.dll pour construire vos contrôleurs dans vos classes de test avec un contexte mocké.

Questions connexes