public void TestRemove() { // Create the cache and register our test types EveCache cache = new EveCache(new MemoryCache("Eve.Tests")); TestItem[] items = new TestItem[10]; TestChildItem[] childItems = new TestChildItem[10]; TestStringItem[] stringItems = new TestStringItem[10]; // Populate with initial items for (int i = 0; i < 10; i++) { items[i] = new TestItem(i); childItems[i] = new TestChildItem(i + 100); // Add 100 to avoid ID collisions stringItems[i] = new TestStringItem("Test" + i.ToString()); cache.GetOrAdd(items[i]); cache.GetOrAdd(childItems[i]); cache.GetOrAdd(stringItems[i]); } // Verify that all test items have been added Assert.AreEqual(((IEnumerable <KeyValuePair <string, object> >)cache.InnerCache).Count(), 30); // Remove the first 10 items foreach (TestItem test1 in items) { var result = cache.Remove <TestItem>(test1.Id); // Verify the return value Assert.AreEqual(result, test1); } // Verify that the objects have been removed Assert.AreEqual(((IEnumerable <KeyValuePair <string, object> >)cache.InnerCache).Count(), 20); // Try to remove a non-existent item var value = cache.Remove <TestItem>("Nonexistent"); Assert.IsNull(value); // Remove the next 10 items foreach (TestChildItem test2 in childItems) { var result = cache.Remove <TestChildItem>(test2.Id); // Verify the return value Assert.AreEqual(result, test2); } // Verify that the objects have been removed Assert.AreEqual(((IEnumerable <KeyValuePair <string, object> >)cache.InnerCache).Count(), 10); // Remove the last 10 items foreach (TestStringItem test3 in stringItems) { var result = cache.Remove <TestStringItem>(test3.Id); // Verify the return value Assert.AreEqual(result, test3); } // Verify that the objects have been removed Assert.AreEqual(((IEnumerable <KeyValuePair <string, object> >)cache.InnerCache).Count(), 0); }