我有selected
返回bootstrap 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
这给了我一个错误。当我调试时,我发现这是因为null
在帮助代码的第5行上是getActionBar().hide();
。
测试该代码的灵活,正确的方法是什么?
答案 0 :(得分:1)
我注意到你正在使用rhino-mocks但是通过伪造HtmlHelper
的依赖关系来使用Typemock Isolater解决问题是可能的(而且非常简单),如下例所示: / p>
[TestMethod, Isolated]
public void WhenPassedControllerAndActionMatchContextReturnSelectedClass()
{
var fakeHtmlHalper = Isolate.Fake.Dependencies<HtmlHelper>();
var fakeViewContext = Isolate.GetFake<ViewContext>(fakeHtmlHalper);
Isolate.WhenCalled(() => fakeViewContext.RouteData.Values["controller"]).WillReturn("performance");
Isolate.WhenCalled(() => fakeViewContext.RouteData.Values["action"]).WillReturn("search");
var result = fakeHtmlHalper.IsSelected("performance", "search");
Assert.AreEqual("selected", result);
}