public async Task SellBallotAsync_PicksRandomBallotRegistersAsSold() { // Arrange int expectedRandomNumber = 2; var expectedRandomNumbers = new List <int> { expectedRandomNumber }; int expectedBallotNumber = 123456789; DateTime expectedSellDate = new DateTime(2017, 12, 25); SystemTime.SetDateTime(expectedSellDate); var expectedBallots = new List <Ballot> { new Ballot(), new Ballot(), new Ballot() { Number = expectedBallotNumber } }; int?lastNumber = null; var expectedDraw = new Draw { SellUntilDate = new DateTime(2018, 1, 1), Ballots = expectedBallots }; GenerationSettings actualGenerationSettings = null; RandomGeneratorMock .Setup(mock => mock.GenerateRandomNumbersAsync(It.IsAny <GenerationSettings>())) .Callback((GenerationSettings generationSettings) => { actualGenerationSettings = generationSettings; }) .ReturnsAsync(expectedRandomNumbers); // Act Ballot result = await Lottery.SellBallotAsync(expectedDraw, lastNumber); // Assert result.Should().NotBeNull(); result.Number.Should().Be(expectedBallotNumber); result.SellDate.Should().Be(expectedSellDate); actualGenerationSettings.Should().NotBeNull(); actualGenerationSettings.NumberOfIntegers.Should().Be(1); actualGenerationSettings.MinimalIntValue.Should().Be(0); actualGenerationSettings.MaximumIntValue.Should().Be(2); RandomGeneratorMock.VerifyAll(); }