2009-02-05 7 views
24

Compte tenu de la classe suivante:Comment obtenir des données de modèle à partir d'un ViewResult dans ASP.NET MVC RC1?

public class ProjectController : Controller 
{ 
    public ActionResult List() 
    { 
     return View(new List<string>()); 
    } 
} 

Comment puis-je obtenir une référence à l'objet modèle dans le test unitaire suivant?

public class ProjectControllerTests 
{ 
    private readonly ProjectController controller; 

    public ProjectControllerTests() 
    { 
     controller = new ProjectController(); 
    } 

    [Fact] 
    public void List_Action_Provides_ProjectCollection() 
    { 
     var result = (ViewResult)controller.List(); 

     Assert.NotNull(result); 
    } 
} 

J'ai essayé d'entrer dans l'action du contrôleur pour voir quels champs internes étaient définis, mais sans succès.

Ma connaissance d'ASP.NET MVC est assez limitée, mais je suppose que je ne configure pas le contrôleur avec un contexte correct.

Des suggestions?

Répondre

37

Essayez:

result.ViewData.Model 

Hope this helps.

+0

fsabau, vous avez absolument raison. Je ne peux pas croire que j'ai raté ça. D'oh! –

6

Dans la version Release Candidate de l'infrastructure Asp.Net Mvc, le modèle est rendu disponible via la propriété "Model" de l'objet ViewResult. Voici une version plus précise de votre test:

[Fact] 
public void List_Action_Provides_ProjectCollection() 
{ 
    //act 
    var result = controller.List(); 

    //assert 
    var viewresult = Assert.IsType<ViewResult>(result); 
    Assert.NotNull(result.ViewData.Model); 
    Assert.IsType<List<string>>(result.ViewData.Model); 
} 
Questions connexes