public void Save_AllScenarios_FuncIsCalledAndCorrectItemsPassed() { //Arrange IEnumerable <ITestObject> addedItems = new List <ITestObject>(); IEnumerable <ITestObject> deletedItems = new List <ITestObject>(); IEnumerable <ITestObject> modifiedItems = new List <ITestObject>(); IEnumerable <ITestObject> arg1 = null; IEnumerable <ITestObject> arg2 = null; IEnumerable <ITestObject> arg3 = null; bool fetchCalled = false; bool fetchAllCalled = false; bool saveCalled = false; Func <int, ITestObject> fetch = x => { fetchCalled = true; return(new Mock <ITestObject>().Object); }; Func <IEnumerable <ITestObject> > fetchAll = () => { fetchAllCalled = true; return(new Mock <IEnumerable <ITestObject> >().Object); }; Action <IEnumerable <ITestObject>, IEnumerable <ITestObject>, IEnumerable <ITestObject> > save = (a, b, c) => { saveCalled = true; arg1 = a; arg2 = b; arg3 = c; }; var mapping = new PicnicCacheMapping <int, ITestObject>(fetch, fetchAll, save); //Act mapping.Save(addedItems, deletedItems, modifiedItems); //Assert Assert.IsTrue(saveCalled); Assert.AreEqual(addedItems, arg1); Assert.AreEqual(deletedItems, arg2); Assert.AreEqual(modifiedItems, arg3); Assert.IsFalse(fetchCalled); Assert.IsFalse(fetchAllCalled); }