예제 #1
0
        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);
        }