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