public void GetOrAddTest() { var provider = new MemoryCacheProvider(); var cacheKey = new CacheKey("AddTest" + DateTime.Now.Ticks); var value = "Test Value " + DateTime.Now; var cachePolicy = new CachePolicy(); int callCount = 0; Func <CacheKey, object> valueFactory = k => { callCount++; return(value); }; var result = provider.GetOrAdd(cacheKey, valueFactory, cachePolicy); result.Should().Be(value); callCount.Should().Be(1); // look in underlying MemoryCache string innerKey = MemoryCacheProvider.GetKey(cacheKey); var cachedValue = MemoryCache.Default.Get(innerKey); cachedValue.Should().NotBeNull(); cachedValue.Should().Be(value); callCount = 0; var result2 = provider.GetOrAdd(cacheKey, valueFactory, cachePolicy); result2.Should().Be(value); callCount.Should().Be(0); }