Как проверить вспомогательный метод? - PullRequest
2 голосов
/ 06 мая 2011

Я сделал помощника

public static class UrlHelperExtension
{
    public static string GetContent(this UrlHelper url, string link, bool breakCache = true)
    {
        // stuff
    }
}

Как мне проверить его в модульном тесте?

[TestClass]
public class HelperTestSet
{
    [TestMethod]
    public void GetContentUrl()
    {
        // What do I need to do here?
        // I need a RequestContext to create a new UrlHelper
        // Which is the simplest way to test it?
    }
}

Как создать помощника, необходимого для теста?

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Если вы действительно хотите протестировать его полностью без связи, вам нужно ввести еще один уровень абстракции. Так что в вашем случае вы могли бы сделать что-то вроде этого:

public interface IUrlHelper 
{
    public string Action(string actionName);

    // Add other methods you need to use in your extension method.
}

public class UrlHelperAdapter : IUrlHelper
{
    private readonly UrlHelper urlHelper;

    public UrlHelperAdapter(UrlHelper urlHelper)
    {
        this.urlHelper = urlHelper;
    }

    string IUrlHelper.Action(string actionName)
    {
        return this.urlHelper.Action(actionName);
    }
}

public static class UrlHelperExtension
{
    public static string GetContent(this UrlHelper url, string link, bool breakCache = true)
    {
        return GetContent(new UrlHelperAdapter(url), link, breakCache); 
    }

    public static string GetContent(this IUrlHelper url, string link, bool breakCache =     true)
    {
        // Do the real work on IUrlHelper
    }
}

[TestClass]
public class HelperTestSet
{
    [TestMethod]
    public void GetContentUrl()
    {
        string expected = "...";

        IUrlHelper urlHelper = new UrlHelperMock();

        string  actual = urlHelper.GetContent("...", true);

        Assert.AreEqual(expected, actual);
    }
}
1 голос
/ 06 мая 2011

Читайте следующие URl может вам помочь. проверка методов расширения

0 голосов
/ 12 мая 2011

С на этом сайте Я придумал

namespace Website.Tests
{
    public static class UrlHelperExtender
    {
        public static string Get(this UrlHelper url)
        {
            return "a";
        }
    }

    [TestClass]
    public class All
    {
        private class FakeHttpContext : HttpContextBase
        {
            private Dictionary<object, object> _items = new Dictionary<object, object>();
            public override IDictionary Items { get { return _items; } }
        }

        private class FakeViewDataContainer : IViewDataContainer
        {
            private ViewDataDictionary _viewData = new ViewDataDictionary();
            public ViewDataDictionary ViewData { get { return _viewData; } set { _viewData = value; } }
        }

        [TestMethod]
        public void Extension()
        {
            var vc = new ViewContext();
            vc.HttpContext = new FakeHttpContext();
            vc.HttpContext.Items.Add("wtf", "foo");

            var html = new HtmlHelper(vc, new FakeViewDataContainer());
            var url = new UrlHelper(vc.RequestContext);

            var xx = url.Get();

            Assert.AreEqual("a", xx);
        }
    }
}
...