SPList Typemock

Hier ein kleines Beispiel um eine Sharepointliste mit Typemock erfolgreich zu faken.

Ausgangspunkt ist die Klasse ListHandler, die eine Liste übergeben bekommen und aus dieser Liste passende Einträge heraussucht.

public class ListHandler
{
    private const string VALUE_FIELD_NAME = "Value";
    private SPList list;

    public ListHandler(SPList list)
    {
        this.list = list;
    }

    public string GetResourceItem(string key)
    {
        foreach (SPListItem item in list.Items)
        {
            if (item.Title == key && item[VALUE_FIELD_NAME] != null)
                return item[VALUE_FIELD_NAME].ToString();
        }
        return String.Empty;
    }
}

Der dazugehörige Test sieht folgendermaßen aus:

[TestFixture]
public class ListHandlerTest
{
    private const string RESOURCE_LIST = "ResourceList";

    [Test]
    [Isolated]
    public void GetListEntryTest()
    {
        SPList list = this.CreateListMock();

        ListHandler handler = new ListHandler(list);

        string resource = handler.GetResourceItem("Content");

        Assert.AreEqual("Inhalt", resource);
    }


    private SPList CreateListMock()
    {
        SPSite fakeSite = Isolate.Fake.Instance<SPSite>(Members.ReturnRecursiveFakes);
        var fakeList = fakeSite.OpenWeb().Lists[RESOURCE_LIST];

        Isolate.WhenCalled(() => fakeList.Items[0].Title).WillReturn("Header");
        Isolate.WhenCalled(() => fakeList.Items[0]["Value"]).WillReturn("Kopfzeile");

        Isolate.WhenCalled(() => fakeList.Items[1].Title).WillReturn("Content");
        Isolate.WhenCalled(() => fakeList.Items[1]["Value"]).WillReturn("Inhalt");

        Isolate.WhenCalled(() => fakeList.Items[2].Title).WillReturn("Footer");
        Isolate.WhenCalled(() => fakeList.Items[2]["Value"]).WillReturn("Fußzeile");

        return fakeList;
    }
}

Der entscheidende Passus ist der, bei der SPSite zu starten. Eine Zeitlang hatte ich es über SPWeb direkt versucht, was jedesmal fehlschlug.

So können schnell Listen zusammengestellt und erfolgreich getesten werden. Evtl. habe ich in den nächsten Tagen ein wenig Zeit für weitere Tests, wie z.B. Workflows.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s