눈에 띄는 것이 없습니다. ControllerContext의 ParentActionViewContext 속성이 가상으로 표시되지 않으므로 un-mockable이라는 것을 이미 발견했습니다. 그러나 원하는 값으로 ViewContext 객체를 만들고 "ParentActionViewContext"키를 사용하여 해당 객체를 RouteData.DataTokens 사전에 추가하여 원하는 것을 얻을 수 있습니다.
ControllerContext 클래스의 소스 코드와 http://bit.ly/ku8vR4의 ParentActionViewContext 속성 구현을 볼 수 있습니다.
여기 내 시험에서이 구현 방법은 다음과 같습니다이 도움이
[TestFixture]
public class SomeControllerTests
{
private PartialViewResult _result;
private Mock<HttpContextBase> _mockHttpContext;
private HttpContextBase _httpContext;
private RouteData _routeData;
private RouteData _parentRouteData;
[Test]
public void CanDoSomething()
{
SetupAnonymousUser();
SetupHttpContext();
SetupRouteData();
var controller = new FooController();
controller.ControllerContext = new ControllerContext(_httpContext, _routeData, controller);
_result = controller.Index() as PartialViewResult;
var model = _result.ViewData.Model as FooViewModel;
Assert.IsNotNull(model);
Assert.AreEqual("New", model.UserStatus);
Assert.AreEqual("21", model.PromoId);
}
private void SetupHttpContext()
{
_mockHttpContext = new Mock<HttpContextBase>();
_httpContext = _mockHttpContext.Object;
}
private void SetupRouteData()
{
SetupParentRouteData();
var viewContext = new ViewContext {RouteData = _parentRouteData};
_routeData = new RouteData();
_routeData.Values.Add("controller", "foo");
_routeData.Values.Add("action", "index");
_routeData.DataTokens["ParentActionViewContext"] = viewContext;
}
private void SetupParentRouteData()
{
_parentRouteData = new RouteData();
_parentRouteData.Values.Add("controller", "home");
_parentRouteData.Values.Add("action", "index");
}
}
희망!
마이클 Ibarra
감사합니다. 나는 많은 "파기"후에 유사한 somthing와 끝났다 :) – Iridio