0

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);

    }

}

}

そして、私は得る

System.InvalidCastException : Unable to cast object of type 'Castle.Proxies.PageDataProxy' to type 'LocalEPiSandbox.Templates.PageTypes.StartPageData'.

これにどのようにアプローチしますか?

4

1 に答える 1

1

その実装に組み込まれた抽象化に依存する必要があります (DataFactory の上にいくつかのファサード クラッドが必要です)。EPiAbstractions を持つ人々へのより多くのテスト容易性をご覧ください! .

于 2012-08-02T06:39:23.250 に答える