Я пытаюсь написать тест на качестве метод расширения UrlHelper, который используется, как это:модульное тестирование Url.Action (с помощью Rhino Mocks?)
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 («Test», «TestAction»), но она не будет выполнена в любом случае, так что я знаю, что это не мой метод расширения, который не работает. 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