ASP.NET MVC 앱의 메뉴 URL은 컨트롤러/액션에서 생성됩니다. 그래서 그들은ASP.NET MVC : 모의 controller.Url.Action
이라고 부릅니다.controller.Url.Action(action, controller)
이제 단위 테스트에서 어떻게 작동합니까? 내가 성공적으로
var controller = new TestControllerBuilder().CreateController<OrdersController>();
와 MVCContrib를 사용하지만 NullReferenceException이 URL 때문에 == null를 실패 나는 controller.Url.Action (액션, 컨트롤러)를 얻을 그것으로 수행하려고 뭐든간에.
업데이트 : HttpContext를 가로채는 방법이 아닙니다. MVCContrib, Scott Hanselman의 위조 사례 및 http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx의 예제를 사용하여 여러 가지 방법으로이 작업을 수행했습니다. 내가 가짜 값을 알아야하기 때문에 이것은 도움이되지 않습니다 ... ApplicationPath입니까? 어떻게 설정해야합니까? 호출 된 컨트롤러/액션과 일치해야합니까? 즉, Url.Action은 어떻게 작동하며 어떻게 만족합니까?
나는 또한 IUrlActionAbstraction을 할 수 있고 그걸로 갈 수 있다는 것을 알고있다. 그러나 나는 이것을하고 싶지 않다. 결국, 나는 MVCContrib/Mock의 전체 능력을 가지고 있으며 또 다른 추상화가 필요한 이유는 무엇입니까?
var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
HomeController controller = CreateController<HomeController>();
controller.HttpContext.Response
.Stub(x => x.ApplyAppPathModifier("/Home/About"))
.Return("/Home/About");
controller.Url = new UrlHelper(
new RequestContext(
controller.HttpContext, new RouteData()
),
routes
);
var url = controller.Url.Action("About", "Home");
Assert.IsFalse(string.IsNullOrEmpty(url));
테스트 스위트는 무엇입니까? –
답변 자체는 가치가 없으므로 비슷한 대답을 가리키고 있습니다. http://bit.ly/aSJ0a –
예 해당 링크를 사용했는데 작동하지 않았습니다. 사실 나는 Scott의 버전과 MVCContrib를 모두 시도했다. 내가 이해하려고하는 것은 설정해야 할 가치가 무엇입니까? Url.Action()이 실제로 사용하는 것은 무엇입니까? 나는. 당신이 제공 한 링크에 많은 변수를 설정하는 Moq 버전이 있습니다 ... 모두 필요합니까? 나는 행운이없이 그들 모두를 시험해 보았다. – queen3