コード例 #1
0
        public void GetResourceItem_With_ManyThreads_OnlyCalls_Inner_Once()
        {
            //Arrange
            var inner = new Mock <IContentSource>();

            inner.SetupSequence(o => o.GetAllContentItemsAsync("en-US", null))
            .ReturnsAsync(() => {
                Thread.Sleep(500);
                return(new List <ContentItem> {
                    new ContentItem {
                        Name = "A", Value = "ValA", Enabled = true
                    }
                });
            });

            var memoryStore = new MemoryContentSource {
                NextSource = inner.Object
            };

            //Act
            Parallel.For(0, 20, t =>
            {
                for (int i = 0; i < 10; i++)
                {
                    memoryStore.GetContentItem("A", "en-US");
                }
            });

            //Assert
            inner.Verify(o => o.GetAllContentItemsAsync("en-US", null), Times.Once);
        }
コード例 #2
0
        public void GetResourceItem_Called_Twice_OnlyCalls_Inner_Once()
        {
            //Arrange
            var inner = new Mock <IContentSource>();

            inner.Setup(o => o.GetAllContentItemsAsync("en-US", null))
            .ReturnsAsync(new List <ContentItem> {
                new ContentItem {
                    Name = "A", Value = "ValA", Enabled = true
                }
            });

            var memoryStore = new MemoryContentSource {
                NextSource = inner.Object
            };

            //Act
            var item1 = memoryStore.GetContentItem("A", "en-US");
            var item2 = memoryStore.GetContentItem("A", "en-US");

            //Assert
            Assert.Equal("ValA", item1);
            Assert.Same(item1, item2);
            inner.Verify(o => o.GetAllContentItemsAsync("en-US", null), Times.Once);
        }
コード例 #3
0
        public void GetResourceItem_With_Exception_Recovers()
        {
            //Arrange
            var inner = new Mock <IContentSource>();

            inner.SetupSequence(o => o.GetAllContentItemsAsync("en-US", null))
            .Throws(new Exception("Test Error"))
            .ReturnsAsync(new List <ContentItem> {
                new ContentItem {
                    Name = "A", Value = "ValA", Enabled = true
                }
            });

            var memoryStore = new MemoryContentSource {
                NextSource = inner.Object
            };

            //Act
            Assert.ThrowsAny <Exception>(() => memoryStore.GetContentItem("A", "en-US"));

            var item = memoryStore.GetContentItem("A", "en-US");

            //Assert
            inner.Verify(o => o.GetAllContentItemsAsync("en-US", null), Times.Exactly(2));
        }
コード例 #4
0
        public async Task Memory_Over_Api_Works()
        {
            //Arrange
            await SetupResourceSet();

            //Arrange
            var source = new MemoryContentSource {
                NextSource = GetApiContentSource()
            };

            //Assert
            Assert.Equal("ValA", source.GetContentItem("A", "en-US"));
            Assert.Equal("ValA-es", source.GetContentItem("A", "es"));
            Assert.Null(source.GetContentItem("A", "es-MX"));
        }
コード例 #5
0
        public void GetResourceItem_With_ManyThreads_Errors_Twice_Then_Recovers()
        {
            //Arrange
            var inner = new Mock <IContentSource>();

            inner.SetupSequence(o => o.GetAllContentItemsAsync("en-US", null))
            .Throws(new Exception("Test Error1"))
            .Throws(new Exception("Test Error2"))
            .ReturnsAsync(() => {
                Thread.Sleep(500);
                return(new List <ContentItem> {
                    new ContentItem {
                        Name = "A", Value = "ValA", Enabled = true
                    }
                });
            });

            var memoryStore = new MemoryContentSource {
                NextSource = inner.Object
            };

            //Act

            Parallel.For(0, 20, t =>
            {
                for (int i = 0; i < 10; i++)
                {
                    try
                    {
                        memoryStore.GetContentItem("A", "en-US");
                    }
                    catch (Exception)
                    {
                    }
                }
            });

            //Assert
            inner.Verify(o => o.GetAllContentItemsAsync("en-US", null), Times.Exactly(3));
        }