我試圖寫一個UrlHelper extensionmethod時使用這樣一個測試:單元測試Url.Action(使用犀牛製品?)
Url.Action<TestController>(x => x.TestAction());
不過,我似乎無法設置正確以便我可以創建一個新的UrlHelper,然後聲明返回的url是預期的。這就是我所擁有的,但我對任何不涉及嘲笑的東西都是開放的。 ; O)
[Test]
public void Should_return_Test_slash_TestAction()
{
// Arrange
RouteTable.Routes.Add("TestRoute", new Route("{controller}/{action}", new MvcRouteHandler()));
var mocks = new MockRepository();
var context = mocks.FakeHttpContext(); // the extension from hanselman
var helper = new UrlHelper(new RequestContext(context, new RouteData()), RouteTable.Routes);
// Act
var result = helper.Action<TestController>(x => x.TestAction());
// Assert
Assert.That(result, Is.EqualTo("Test/TestAction"));
}
我試圖將其更改爲urlHelper.Action(「測試」,「TestAction」),但讓我知道這是不是我的extensionmethod不工作就會反正失敗。 NUnit的返回:
NUnit.Framework.AssertionException: Expected string length 15 but was 0. Strings differ at index 0.
Expected: "Test/TestAction"
But was: <string.Empty>
我已經驗證該路由註冊和工作,我使用Hanselmans擴展創建一個假的HttpContext。這裏是我的UrlHelper extentionmethod樣子:
public static string Action<TController>(this UrlHelper urlHelper, Expression<Func<TController, object>> actionExpression) where TController : Controller
{
var controllerName = typeof(TController).GetControllerName();
var actionName = actionExpression.GetActionName();
return urlHelper.Action(actionName, controllerName);
}
public static string GetControllerName(this Type controllerType)
{
return controllerType.Name.Replace("Controller", string.Empty);
}
public static string GetActionName(this LambdaExpression actionExpression)
{
return ((MethodCallExpression)actionExpression.Body).Method.Name;
}
任何的想法是什麼,我缺少的得到它的工作??? /Kristoffer
你可以發佈你的Factory.CreateUrlHelper方法代碼嗎? – nkirkes 2009-06-04 16:28:58