मैं यूनिट का उपयोग करके कुछ कोड परीक्षण करने का प्रयास कर रहा हूं।एएसपी.नेट एमवीसी - सिस्टम.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);
}
मेरे डिफ़ॉल्ट controllerfactory MvcContrib से एक StructureMap नियंत्रक कारखाना है: मैं एक विधि है। मैं MvcContrib से MvcMockHelpers का भी उपयोग कर रहा हूं ताकि मुझे HttpContextBase का मज़ाक उड़ा सकें।
नियंत्रक मैं परीक्षण करने के लिए प्रयास कर रहा हूँ ऊपर RenderRoute प्रणाली को बुलाती है और पर चल रही है:
Controllers.WidgetControllerTests.CanCreateWidgetOnPage: System.Web.HttpException: त्रुटि के साथ
IController controller = factory.CreateController(requestContext, controllerName);
'System.Web.Compilation.CompilationLock' के लिए प्रारंभकर्ता टाइप करें अपवाद फेंक दिया। ----> System.TypeInitializationException: 'System.Web.Compilation.CompilationLock' के लिए प्रकार प्रारंभकर्ता एक अपवाद फेंक दिया। ----> System.NullReferenceException: ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।
मैं यूनिट परीक्षण/मॉकिंग के लिए बिल्कुल नया हूं और यह संभावना है कि मैं कुछ सरल नहीं देख रहा हूं।
[Test]
public void Test()
{
HttpContextBase context = MvcMockHelpers.DynamicHttpContextBase();
string s = RenderExtensions.RenderAction<HomeController>(context, a => a.About());
Console.WriteLine(s);
Assert.IsNotNullOrEmpty(s);
}
किसी भी मदद की सराहना की जाएगी:
यहाँ परीक्षण मैं वर्तमान में चल रहा हूँ है।
मैं इस सरल इकाई परीक्षण करने के लिए नीचे समस्या को सरल बनाया गया है:
[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);
}