public void GetRandomItem_WithCollection_ReturnsCorrectItem(int randomNumber)
        {
            var mockRandomNumberGenerator = new Mock <IRandomNumberGenerator>();

            mockRandomNumberGenerator.Setup(x => x.GetRandomInteger(3)).Returns(randomNumber);
            var randomItemSelector = new RandomItemSelector(mockRandomNumberGenerator.Object);

            var items = new WeightedItem[]
            {
                new WeightedItem {
                    RandomizationWeight = 1
                },
                new WeightedItem {
                    RandomizationWeight = 2
                },
                new WeightedItem {
                    RandomizationWeight = 3
                },
            };

            var item = randomItemSelector.GetRandomItem <WeightedItem>(items);

            Assert.AreEqual(items[randomNumber - 1], item);
            mockRandomNumberGenerator.Verify(x => x.GetRandomInteger(3), Times.Once);
            mockRandomNumberGenerator.VerifyNoOtherCalls();
        }
        public void GetRandomItem_WithEmptyArray_Throws()
        {
            var randomItemSelector = new RandomItemSelector(new RandomNumberGenerator());

            Assert.Throws <ArgumentException>(() => randomItemSelector.GetRandomItem <WeightedItem>(new WeightedItem[0]));
        }