Ich versuche, einen Test für eine UrlHelper Extension zu schreiben, die wie folgt verwendet:Unittesting Url.Action (mit Rhino Mocks?)
Url.Action<TestController>(x => x.TestAction());
Allerdings kann ich es nicht richtig so gesetzt scheinen nach oben dass ich einen neuen UrlHelper erstellen und dann bestätigen kann, dass die zurückgegebene URL die erwartete war. Das ist, was ich habe, aber ich bin offen für alles, was nicht auch Spott bedeutet. ; 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"));
}
Ich habe versucht, es zu urlHelper.Action („Test“, „TestAction“) zu ändern, aber es wird auf jeden Fall nicht so dass ich weiß, dass es nicht meine Extension ist, die nicht funktionieren. NUnit zurück:
NUnit.Framework.AssertionException: Expected string length 15 but was 0. Strings differ at index 0.
Expected: "Test/TestAction"
But was: <string.Empty>
ich überprüft haben, dass die Route registriert und arbeiten, und ich bin mit Hanselmans Erweiterung für eine gefälschte Httpcontext zu schaffen. Hier ist, was meine UrlHelper extentionmethod wie folgt aussehen:
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;
}
Alle Ideen, was mir fehlt, um es funktioniert ??? /Kristoffer
Können Sie Ihren Factory.CreateUrlHelper-Methodencode posten? – nkirkes