Sample 2: Explicitly Faking an SPItem Collection
Original Method
The following sample shows a method that returns all of the items in a specific list:
C# public List<SPItems> GetUrgentTasks() { var site = new SPSite("http://sharepoint.typemock.com"); var taskList = site.OpenWeb().Lists[TASKS_LIST_NAME]; var urgentTasks = new List<SPItem>(); foreach (SPItem item in taskList.Items) { urgentTasks.Add(item); } return urgentTasks; }
VB
Public Function GetUrgentTasks() As List(Of String)
    Dim site = New SPSite("http://sharepoint.typemock.com")
    
    Dim taskList = site.OpenWeb().Lists(TASKS_LIST_NAME)
    Dim urgentTasks = New List(Of String)()
    
    For Each item As SPListItem In taskList.Items
    	If item(PriorityFieldName) IsNot Nothing AndAlso item(PriorityFieldName).ToString() = Priority.Urgent.ToString() Then
    		urgentTasks.Add(item.Name)
    	End If
    Next
    
    Return urgentTasks
End Function
        
        Typemock Isolator Features Used
•Recursive Fakes
•Swap Future Instance
•Replacing Collections
Scenario
1. Fake the SPSite class. Because you need all of the object-model classes instantiated from SPSite to be faked as well, use the Recursive Fakes feature.
2. Create a fakeItem object.
3. Explicitly declare a collection of three fakeItem objects that will be returned when SPList.Items() is called.
4. Call the method and check the returned values.
Code
C# [TestMethod, Isolated] public void GetAllTasks_ThreeItemsInTasksList_ThreeTaskItemsFound() { // Fake recursively the next SPSite and all its nested classes are faked var fakeSite = Isolate.Fake.NextInstance<SPSite>(); // Retrieve a fake SPList to set behavior var fakeTaskList = fakeSite.OpenWeb().Lists[SharePointLogic var>.TASKS_LIST_NAME]; // Create a fake SPListItem var fakeItem = Isolate.Fake.Instance<SPListItem>(); // List collection shall return an array containing three fake items IsolateWillReturnCollectionValuesOf(new[] {fakeItem, fakeItem, fakeItem}); // Call the method under test var urgentTasks = classUnderTest.GetAllTasks(); Assert.AreEqual(3, urgentTasks.Count); }
VB
<TestMethod(), Isolated()> 
Public Sub GetAllTasks_ThreeItemsInTasksList_ThreeTaskItemsFound()
    ' Fake recursively the next SPSite and all its nested classes are faked
    Dim fakeSite = Isolate.Fake.NextInstance(Of SPSite)()
    ' Retrieve a fake SPList to set behavior
    Dim fakeTaskList = fakeSite.OpenWeb().Lists(SharePointLogic.TASKS_LIST_NAME)
    ' Create a fake SPListItem
    Dim fakeItem = Isolate.Fake.Instance(Of SPListItem)()
    ' List collection shell return three fake items// List collection shall return an array containing three fake items
    Isolate.WhenCalled(Function() fakeTaskList.Items).WillReturnCollectionValuesOf(New SPListItem() {fakeItem, fakeItem, fakeItem})
    ' Call the method under test
    Dim urgentTasks = SharePointLogic.GetAllTasks()
    Assert.AreEqual(3, urgentTasks.Count)
End Sub