Exemplo n.º 1
0
        public void GetExchangeRateOnceWillReturnRateFromInnerCurrency(decimal expectedExchangeRate, string currencyCode, [Frozen] Mock <Currency> innerCurrencyStub, CachingCurrency sut)
        {
            // Fixture setup
            innerCurrencyStub.Setup(c => c.GetExchangeRateFor(currencyCode)).Returns(expectedExchangeRate);
            // Exercise system
            var result = sut.GetExchangeRateFor(currencyCode);

            // Verify outcome
            Assert.Equal <decimal>(expectedExchangeRate, result);
            // Teardown (implicit)
        }
Exemplo n.º 2
0
        public void InnerCurrencyIsInvokedAgainWhenCacheExpires()
        {
            // Fixture setup
            var currencyCode = "CHF";
            var cacheTimeout = TimeSpan.FromHours(1);

            var startTime = new DateTime(2009, 8, 29);

            var timeProviderStub = new Mock <TimeProvider>();

            timeProviderStub
            .SetupGet(tp => tp.UtcNow)
            .Returns(startTime);
            TimeProvider.Current = timeProviderStub.Object;

            var innerCurrencyMock = new Mock <Currency>();

            innerCurrencyMock
            .Setup(c => c.GetExchangeRateFor(currencyCode))
            .Returns(4.911m)
            .Verifiable();

            var sut =
                new CachingCurrency(innerCurrencyMock.Object,
                                    cacheTimeout);

            sut.GetExchangeRateFor(currencyCode);
            sut.GetExchangeRateFor(currencyCode);
            sut.GetExchangeRateFor(currencyCode);

            timeProviderStub
            .SetupGet(tp => tp.UtcNow)
            .Returns(startTime + cacheTimeout);
            // Exercise system
            sut.GetExchangeRateFor(currencyCode);
            // Verify outcome
            innerCurrencyMock.Verify(
                c => c.GetExchangeRateFor(currencyCode),
                Times.Exactly(2));
            // Teardown (implicit)
        }