2010-10-29 4 views
1

Le sujet dit tout. Je suppose que c'est à cause d'une configuration manquante liée à MVC, mais je suis très nouveau dans le monde de http, asp.net et mvc, donc je ne suis pas sûr de ce qui ne va pas.Vue renvoyée par l'action mvc est vide en utilisant moq

public class MyController : Controller { 
    public ActionResult MyAction(MyModel model) { 
     return View(model); 
    } 
} 

var controllerMock = new Mock<MyController>() { 
    CallBase = true // without this, the call to View(model) returns null 
}; 


/* 
* I've also tried this before calling the action: 
* 
* controllerMock.SetFakeControllerContext(); 
* 
* from http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx 
* But the same applies. 
**/ 

ViewResult result = controllerMock.Object.MyAction(new MyModel()) as ViewResult; 
Assert.AreEqual("MyAction", result.ViewName); // ViewName etc is blank 

Répondre

2

Si vous utilisez MvcContrib pour vos tests que vous pouvez essayer quelque chose comme ceci:

var controller = new MyController(); 
var builder = new TestControllerBuilder(); 
builder.InitializeController(controller); 

var actionResult = controller.MyAction(new MyModel()); 
ViewResult viewResult = actionResult.AssertViewRendered().ForView(""); 
//or 
ViewResult viewResult = actionResult.AssertViewRendered().ForViewOrItself("MyAction"); 
+0

J'utilise MvcContrib, mais cela n'a pas marché avec ma maquette .. builder.InitializeController (controllerMock.Object) ne lance pas, mais l'action reste vide – simendsjo

+0

vous n'avez pas besoin de vous moquer de votre contrôleur, car vous testez votre contrôleur et non votre maquette. (ou y at-il une raison de se moquer, que je ne vois pas? :-)) – Fabiano

+0

@Fabiano: Très bon point :) J'ai essayé sans se moquer, avec et sans TestControllerBuilder et la même chose avec SetFaceControllerContext - données encore vierges pour la vue cependant. – simendsjo

Questions connexes