public void Invalidate_OfCacheableClassWhenCalledInvalidatedAndCalledAgain_ReturnsSecondCachedValue()
        {
            // Arrange
            int cachedValue = 100;
            AutoRefreshingItemCache <CacheableClass> cache = new AutoRefreshingItemCache <CacheableClass>(
                new FakeLogger(),
                (ct) => { cachedValue += 25; return(Task.FromResult(new CacheableClass(cachedValue))); },
                null,
                TimeSpan.FromMinutes(2)
                );
            CacheableClass cachedClass;
            int            actualResult;
            int            expectedResult = 150;

            cache.Initialise();

            // Act
            _ = cache.GetItem();
            cache.Invalidate();
            TimeDelay.WaitFor(50);
            cachedClass  = cache.GetItem();
            actualResult = cachedClass.GetValue();

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
        public void Invalidate_OfIntWhenCalledInvalidatedAndCalledAgain_ReturnsSecondCachedValue()
        {
            // Arrange
            int cachedValue = 100;
            AutoRefreshingItemCache <int> cache = new AutoRefreshingItemCache <int>(
                new FakeLogger(),
                new NonCloningClonerFactory <int>(),
                (ct) => { cachedValue += 25; return(Task.FromResult(cachedValue)); },
                0,
                TimeSpan.FromMinutes(2)
                );
            int actualResult;
            int expectedResult = 150;

            cache.Initialise();

            // Act
            _ = cache.GetItem();
            cache.Invalidate();
            TimeDelay.WaitFor(50);
            actualResult = cache.GetItem();

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }