Tôi đang cố gắng kiểm tra đơn vị một số mã sử dụng NUnit. Tôi có một phương pháp: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);
}
Nhà điều khiển mặc định của tôi là nhà máy điều khiển cấu trúc MapMap từ MvcContrib. Tôi cũng đang sử dụng MvcMockHelpers từ MvcContrib để giúp tôi giả lập HttpContextBase.
Bộ điều khiển Tôi đang cố gắng thử nghiệm gọi phương thức RenderRoute trên và thổi lên tại địa chỉ:
IController controller = factory.CreateController(requestContext, controllerName);
Với các lỗi:
Controllers.WidgetControllerTests.CanCreateWidgetOnPage: System.Web.HttpException: Các loại initializer cho 'System.Web.Compilation.CompilationLock' ném một ngoại lệ. ----> System.TypeInitializationException: Trình khởi tạo kiểu cho 'System.Web.Compilation.CompilationLock' đã ném một ngoại lệ. ----> System.NullReferenceException: Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng.
Tôi khá mới để thử nghiệm đơn vị/chế nhạo và đó là một khả năng tôi không nhìn thấy một cái gì đó đơn giản.
Đây là thử nghiệm Tôi hiện đang chạy:
[Test]
public void Test()
{
HttpContextBase context = MvcMockHelpers.DynamicHttpContextBase();
string s = RenderExtensions.RenderAction<HomeController>(context, a => a.About());
Console.WriteLine(s);
Assert.IsNotNullOrEmpty(s);
}
Bất kỳ trợ giúp sẽ được đánh giá cao.
tôi đã đơn giản hóa vấn đề xuống để kiểm tra đơn vị đơn giản này:
[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);
}