Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I had a lot of trouble to make unit test working with RenderPartialViewToString. I succeeded by doing 2 things. I had to mock the view engine and the controller context.</p> <p>Here the code :</p> <pre><code>public ViewEngineResult SetupViewContent(string viewName, string viewHtmlContent) { var mockedViewEngine = new Mock&lt;IViewEngine&gt;(); var resultView = new Mock&lt;IView&gt;(); resultView.Setup(x =&gt; x.Render(It.IsAny&lt;ViewContext&gt;(), It.IsAny&lt;TextWriter&gt;())) .Callback&lt;ViewContext, TextWriter&gt;((v, t) =&gt; { t.Write(viewHtmlContent); }); var viewEngineResult = new ViewEngineResult(resultView.Object, mockedViewEngine.Object); mockedViewEngine.Setup(x =&gt; x.FindPartialView(It.IsAny&lt;ControllerContext&gt;(), viewName, It.IsAny&lt;bool&gt;())) .Returns&lt;ControllerContext, string, bool&gt;((controller, view, useCache) =&gt; { return viewEngineResult; }); mockedViewEngine.Setup(x =&gt; x.FindView(It.IsAny&lt;ControllerContext&gt;(), viewName, It.IsAny&lt;string&gt;(), It.IsAny&lt;bool&gt;())) .Returns&lt;ControllerContext, string, string, bool&gt;((controller, view, masterName, useCache) =&gt; { return viewEngineResult; }); ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(mockedViewEngine.Object); return viewEngineResult; } public void SetContext(ref PointCollecteLivraisonController controller) { SetupViewContent("MyViewName", "TheViewContent"); var httpContextBase = new Mock&lt;HttpContextBase&gt;(); var httpRequestBase = new Mock&lt;HttpRequestBase&gt;(); var response = new Mock&lt;HttpResponseBase&gt;(); var session = new Mock&lt;HttpSessionStateBase&gt;(); var routes = new RouteCollection(); RouteConfigurator.RegisterRoutes(routes); var routeData = new RouteData(); routeData.Values.Add("controller", "PointCollecteLivraison"); routeData.Values.Add("action", "RechercheJson"); httpContextBase.Setup(x =&gt; x.Response).Returns(response.Object); httpContextBase.Setup(x =&gt; x.Request).Returns(httpRequestBase.Object); httpContextBase.Setup(x =&gt; x.Session).Returns(session.Object); session.Setup(x =&gt; x["somesessionkey"]).Returns("value"); httpRequestBase.Setup(x =&gt; x.Form).Returns(new NameValueCollection()); controller.ControllerContext = new ControllerContext(httpContextBase.Object, routeData, controller); controller.Url = new UrlHelper(new RequestContext(controller.HttpContext, routeData), routes); } </code></pre> <p>And that is the way i use it all :</p> <pre><code>PointCollecteLivraisonController controller = new PointCollecteLivraisonController(); SetContext(ref controller); </code></pre> <p>Here are my sources : View engine mocking : <a href="http://thoai-nguyen.blogspot.fr/2011/04/test-mock-mvc-view-engine.html" rel="nofollow noreferrer">http://thoai-nguyen.blogspot.fr/2011/04/test-mock-mvc-view-engine.html</a></p> <p>Controller context mocking : <a href="https://stackoverflow.com/questions/3621961/asp-net-mvc-unit-testing-renderpartialviewtostring-with-moq-framework">ASP.NET MVC - Unit testing RenderPartialViewToString() with Moq framework?</a></p> <p>Hope this help.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload