Wie verspotte ich den Controller-Kontext in meinem Komponententest, damit meine Teilansicht der String-Funktion funktionC#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie verspotte ich den Controller-Kontext in meinem Komponententest, damit meine Teilansicht der String-Funktion funktion

Post by Guest »

Ich versuche, einen Komponententest für meinen Controller zu erstellen, aber die Aktion, die ich teste, verwendet eine teilweise View-to-String-Funktion, die in meinen Tests nicht funktionieren möchte.

Code: Select all

private string RenderPartialViewToString(string viewName, object model = null)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");

ViewData.Model = model;

using (System.IO.StringWriter sw = new System.IO.StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);

return sw.GetStringBuilder().ToString();
}
}
Dies führt zu der Fehlermeldung „Objektverweis nicht auf eine Instanz eines Objekts festgelegt“ in der Zeile ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);

Mein Setup im Unit-Test für den Controller ist (mit einigen entfernten Bits zur Vereinfachung):

Code: Select all

var mock = new Mock();
mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
if (userName != null)
{
mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
mock.SetupGet(p => p.HttpContext.User.Identity.IsAuthenticated).Returns(true);
}
else
{
mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(false);
}
var controller = new BlogController();
controller.ControllerContext = mock.Object;
Ich hatte kein Glück bei der Suche nach einer Lösung oder Umgehung. Jede Hilfe wird geschätzt. Danke.



Wie vorgeschlagen habe ich versucht, Routendaten einzurichten, erhalte aber immer noch den Fehler. Das habe ich hinzugefügt:

Code: Select all

var routeData = new RouteData();
routeData.Values.Add("controller", "BlogController");
mock.SetupGet(m => m.RouteData).Returns(routeData);

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post