by Guest » 07 Jan 2025, 11:53
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);
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]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();
}
}
[/code]
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]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;
[/code]
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]var routeData = new RouteData();
routeData.Values.Add("controller", "BlogController");
mock.SetupGet(m => m.RouteData).Returns(routeData);
[/code]