单元测试EPiServer扩展

时间:2012-07-05 13:46:16

标签: unit-testing c#-4.0 episerver-6-r2

在EPiServer中,有人会如何测试类似的扩展程序:


public static class LinkItemExtensions
    {
        public static T GetTypedPage(this LinkItem link) where T : TypedPageData
        {
            return (T) DataFactory.Instance.GetPage(PageReference.ParseUrl(link.Href));
        }
    }

我要做的是以某种方式使用以下代码测试上面的类:


[TestFixture]
public class LinkItemExtensionsTests
    {
        [Test]
        public void GetTypedPage_GivenALinkItem_ReturnsTypedPageData()
        {
            var link = new LinkItem();
            var typedPage = link.GetTypedPage();
            Assert.IsAssignableFrom(typeof(StartPageData), typedPage);
        }
    }

召唤DataFactory.Instance时会出现问题。

  

System.TypeInitializationException : The type initializer for 'EPiServer.DataFactory' threw an exception. ----> System.NullReferenceException : Object reference not set to an instance of an object.

所以我尝试将DataFactory的抽象传递给扩展方法,如下所示:


namespace WebTests
{
    [TestFixture]
    public class PageDataExtensionsTests
    {
        [Test]
        public void GetTypedPage_GivenALinkItem_ReturnsTypedPageData()
        {
            var link = new LinkItem();

        var startPage = A.Fake<StartPageData>();

        var pageDataFactory = A.Fake<IDataFactoryFacade>();

        A.CallTo(() => pageDataFactory.GetPage(null))
            .WithAnyArguments()
            .Returns(startPage);

        var typedPage = link.GetTypedPage<StartPageData>(pageDataFactory);

        Assert.IsAssignableFrom(typeof(StartPageData), typedPage);

    }

}

}

我得到了

        var startPage = A.Fake<StartPageData>();

        var pageDataFactory = A.Fake<IDataFactoryFacade>();

        A.CallTo(() => pageDataFactory.GetPage(null))
            .WithAnyArguments()
            .Returns(startPage);

        var typedPage = link.GetTypedPage<StartPageData>(pageDataFactory);

        Assert.IsAssignableFrom(typeof(StartPageData), typedPage);

    }

}

你如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

你应该依赖于抽象而不是它的实现(你应该在DataFactory之上有一些外观)。请查看More testability to the people with EPiAbstractions!