【发布时间】:2016-11-15 18:12:12
【问题描述】:
我有一个HtmlHelper,它返回引导程序selected 类。我使用这个助手将活动状态应用于我的菜单项。
助手代码
public static string IsSelected(this HtmlHelper html, string controllers = "", string actions = "",
string ccsClass = "selected")
{
var viewContext = html.ViewContext;
var isChildAction = viewContext.Controller.ControllerContext.IsChildAction;
if (isChildAction)
{
viewContext = html.ViewContext.ParentActionViewContext;
}
var routeValues = viewContext.RouteData.Values;
var currentController = routeValues["controller"].ToString();
var currentAction = routeValues["action"].ToString();
if (string.IsNullOrEmpty(controllers))
{
controllers = currentController;
}
if (string.IsNullOrEmpty(actions))
{
actions = currentAction;
}
var acceptedActions = actions.Trim().Split(',').Distinct().ToArray();
var acceptedControllers = controllers.Trim().Split(',').Distinct().ToArray();
return acceptedControllers.Contains(currentController) && acceptedActions.Contains(currentAction)
? ccsClass
: string.Empty;
}
测试代码
[Test]
public void WhenPassedControllerAndActionMatchContextReturnSelectedClass()
{
var htmlHelper = CreateHtmlHelper(new ViewDataDictionary());
var result = htmlHelper.IsSelected("performance", "search");
Assert.AreEqual("selected", result);
}
public static HtmlHelper CreateHtmlHelper(ViewDataDictionary viewData)
{
var mocks = new MockRepository();
var controllerContext = mocks.DynamicMock<ControllerContext>(
mocks.DynamicMock<HttpContextBase>(),
new RouteData(),
mocks.DynamicMock<ControllerBase>());
var viewContext = new ViewContext(controllerContext, mocks.StrictMock<IView>(), viewData, new TempDataDictionary(), mocks.StrictMock<TextWriter>());
//var mockViewContext = MockRepository.GenerateMock<ViewContext>();
var mockViewDataContainer = mocks.DynamicMock<IViewDataContainer>();
mockViewDataContainer.Expect(v => v.ViewData).Return(viewData);
return new HtmlHelper(viewContext, mockViewDataContainer);
}
这给了我一个错误。当我调试时,我看到这是因为 ControllerContext 在 Helper 代码的 Line 5 上是 null。
测试该代码的灵活、正确的方法是什么?
【问题讨论】:
标签: c# asp.net-mvc unit-testing mocking rhino-mocks