public void TestExceptionBubble() { var instanceMock = new Mock <IAwesomeInterface>(); var cacheProviderMock = new Mock <ICacheProvider <IAwesomeInterface> >(); var sleipner = new SleipnerProxy <IAwesomeInterface>(instanceMock.Object, cacheProviderMock.Object); sleipner.Config(a => { a.For(b => b.ParameterlessMethod()).CacheFor(10).BubbleExceptionsWhenStale(); }); var proxyContext = ProxyRequest <IAwesomeInterface> .FromExpression(a => a.ParameterlessMethod()); var cachePolicy = sleipner.CachePolicyProvider.GetPolicy(proxyContext.Method, proxyContext.Parameters); var parameters = new object[0]; IEnumerable <string> result = new[] { "", "" }; var exception = new AwesomeException(); cacheProviderMock.Setup(a => a.GetItem(proxyContext, cachePolicy)).Returns(new CachedObject <IEnumerable <string> >(CachedObjectState.Stale, result)); instanceMock.Setup(a => a.ParameterlessMethod()).Throws(exception); sleipner.Object.ParameterlessMethod(); Thread.Sleep(1000); instanceMock.Verify(a => a.ParameterlessMethod(), Times.Once()); cacheProviderMock.Verify(a => a.GetItem(proxyContext, cachePolicy), Times.Once()); cacheProviderMock.Verify(a => a.StoreItem(proxyContext, cachePolicy, result), Times.Never()); cacheProviderMock.Verify(a => a.StoreException(proxyContext, cachePolicy, exception), Times.Once()); }
public void TestExceptionBubble() { var instanceMock = new Mock<IAwesomeInterface>(); var cacheProviderMock = new Mock<ICacheProvider<IAwesomeInterface>>(); var sleipner = new SleipnerProxy<IAwesomeInterface>(instanceMock.Object, cacheProviderMock.Object); sleipner.Config(a => { a.For(b => b.ParameterlessMethod()).CacheFor(10).BubbleExceptionsWhenStale(); }); var proxyContext = ProxyRequest<IAwesomeInterface>.FromExpression(a => a.ParameterlessMethod()); var cachePolicy = sleipner.CachePolicyProvider.GetPolicy(proxyContext.Method, proxyContext.Parameters); var parameters = new object[0]; IEnumerable<string> result = new[] { "", "" }; var exception = new AwesomeException(); cacheProviderMock.Setup(a => a.GetItem(proxyContext, cachePolicy)).Returns(new CachedObject<IEnumerable<string>>(CachedObjectState.Stale, result)); instanceMock.Setup(a => a.ParameterlessMethod()).Throws(exception); sleipner.Object.ParameterlessMethod(); Thread.Sleep(1000); instanceMock.Verify(a => a.ParameterlessMethod(), Times.Once()); cacheProviderMock.Verify(a => a.GetItem(proxyContext, cachePolicy), Times.Once()); cacheProviderMock.Verify(a => a.StoreItem(proxyContext, cachePolicy, result), Times.Never()); cacheProviderMock.Verify(a => a.StoreException(proxyContext, cachePolicy, exception), Times.Once()); }