Estoy intentando probar un código con NUnit. Tengo un método:ASP.NET Mvc - System.Web.Compilation.CompilationLock
public static string RenderRoute(HttpContextBase context, RouteValueDictionary values)
{
var routeData = new RouteData();
foreach (var kvp in values)
{
routeData.Values.Add(kvp.Key, kvp.Value);
}
string controllerName = routeData.GetRequiredString("controller");
var requestContext = new RequestContext(context, routeData);
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(requestContext, controllerName);
var ActionInvoker = new ControllerActionInvoker();
var controllerContext = new ControllerContext(requestContext, (ControllerBase)controller);
((ControllerBase)controller).ControllerContext = controllerContext;
string actionName = routeData.GetRequiredString("action");
Action action = delegate { ActionInvoker.InvokeAction(controllerContext, actionName); };
return new BlockRenderer(context).Capture(action);
}
Mi controllerfactory por defecto es una fábrica de controlador StructureMap MvcContrib. También estoy usando MvcMockHelpers de MvcContrib para ayudarme a simular el HttpContextBase.
El controlador que estoy tratando de prueba llama al método RenderRoute arriba y explota en:
IController controller = factory.CreateController(requestContext, controllerName);
con el error:
Controllers.WidgetControllerTests.CanCreateWidgetOnPage: System.Web.HttpException: La tipo de inicializador para 'System.Web.Compilation.CompilationLock' lanzó una excepción. ----> System.TypeInitializationException: el inicializador de tipo para 'System.Web.Compilation.CompilationLock' lanzó una excepción. ----> System.NullReferenceException: referencia de objeto no establecida en una instancia de un objeto.
Soy bastante nuevo en pruebas unitarias/burlas y es posible que no vea algo simple.
Aquí está la prueba actualmente estoy corriendo:
[Test]
public void Test()
{
HttpContextBase context = MvcMockHelpers.DynamicHttpContextBase();
string s = RenderExtensions.RenderAction<HomeController>(context, a => a.About());
Console.WriteLine(s);
Assert.IsNotNullOrEmpty(s);
}
se agradecería cualquier ayuda.
He simplificado el problema en esta sencilla prueba de unidad:
[Test]
public void Test2()
{
HttpContextBase context = MvcMockHelpers.DynamicHttpContextBase();
var routeData = new RouteData();
routeData.Values.Add("Controller", "Home");
routeData.Values.Add("Action", "About");
string controllerName = routeData.GetRequiredString("controller");
var requestContext = new RequestContext(context, routeData);
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(requestContext, controllerName);
Assert.IsNotNull(controller);
}