मैं एक UrlHelper extensionmethod है कि इस तरह प्रयोग किया जाता है के लिए एक परीक्षण लिखने के लिए कोशिश कर रहा हूँ:Unittesting Url.Action (राइनो Mocks का उपयोग कर?)
Url.Action<TestController>(x => x.TestAction());
हालांकि, मैं इसे सही ढंग से तो सेट नहीं लग सकता है कि मैं एक नया UrlHelper बना सकता हूं और फिर जोर दे सकता हूं कि लौटा हुआ यूआरएल अपेक्षित था। यही वह है जो मुझे मिला है लेकिन मैं किसी भी चीज़ के लिए खुला हूं जिसमें मॉकिंग भी शामिल नहीं है। , हे)
[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;
}
कोई भी विचार ??? /क्रिस्टोफर
क्या आप अपनी फैक्टरी पोस्ट कर सकते हैं। क्रेतेउरल हेल्पर विधि कोड? – nkirkes