Exemple #1
0
        public void CreateReturnsValuesFromCorrectSetForRequestsWithDifferentTypesAndSameLimits(
            Type primaryRequestType, Type otherRequestType)
        {
            // Arrange
            int minimum = 0, maximum = 2;
            int rangeCount = maximum - minimum + 1;

            var primaryRequest = new RangedNumberRequest(primaryRequestType, minimum, maximum);
            var otherRequest   = new RangedNumberRequest(otherRequestType, minimum, maximum);
            var dummyContext   = new DelegatingSpecimenContext();
            var primaryResults = new List <IComparable>();

            var sut = new RandomRangedNumberGenerator();

            // Act
            primaryResults.Add((IComparable)sut.Create(primaryRequest, dummyContext));
            primaryResults.Add((IComparable)sut.Create(primaryRequest, dummyContext));
            var otherResult = ((IComparable)sut.Create(otherRequest, dummyContext));

            primaryResults.Add((IComparable)sut.Create(primaryRequest, dummyContext));

            // Verify
            Assert.True(primaryResults.Distinct().Count() == 3);
            Assert.InRange(otherResult, minimum, maximum);

            Assert.True(Enumerable.Range(minimum, rangeCount)
                        .Select(a => Convert.ChangeType(a, primaryRequestType))
                        .Cast <IComparable>()
                        .All(a => primaryResults.Any(b => b.CompareTo(a) == 0)));
        }
Exemple #2
0
        public void CreateReturnsUniqueNumbersOnMultipleCallAsynchronously(int minimum, int maximum, int numberOfThreads)
        {
            // Arrange
            int expectedDistinctCount = Math.Abs((maximum - minimum + 1));
            int requestsPerThread     = expectedDistinctCount / numberOfThreads;
            var dummyContext          = new DelegatingSpecimenContext();

            var sut = new RandomRangedNumberGenerator();

            // Act

            var numbers = Enumerable
                          .Range(0, numberOfThreads)
                          .AsParallel()
                          .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                          .WithDegreeOfParallelism(numberOfThreads)
                          .Select(threadNumber => Enumerable
                                  .Range(0, requestsPerThread)
                                  .Select(_ => new RangedNumberRequest(typeof(int), minimum, maximum))
                                  .Select(request => sut.Create(request, dummyContext))
                                  .Cast <int>()
                                  .ToArray())
                          .ToArray();

            // Verify
            int actualDistinctCount = numbers.SelectMany(a => a).Distinct().Count();

            Assert.Equal(expectedDistinctCount, actualDistinctCount);
        }
Exemple #3
0
        public void CreateWithNullContextThrows()
        {
            // Arrange
            var sut          = new RandomRangedNumberGenerator();
            var dummyRequest = new object();

            // Act & assert
            Assert.Throws <ArgumentNullException>(() => sut.Create(dummyRequest, null));
        }
Exemple #4
0
        public void SutIsSpecimenBuilder()
        {
            // Arrange
            // Act
            var sut = new RandomRangedNumberGenerator();

            // Assert
            Assert.IsAssignableFrom <ISpecimenBuilder>(sut);
        }
        public void CreateWithNullContextThrows()
        {
            // Fixture setup
            var sut          = new RandomRangedNumberGenerator();
            var dummyRequest = new object();

            // Exercise system and verify outcome
            Assert.Throws <ArgumentNullException>(() => sut.Create(dummyRequest, null));
            // Teardown
        }
        public void SutIsSpecimenBuilder()
        {
            // Fixture setup
            // Exercise system
            var sut = new RandomRangedNumberGenerator();

            // Verify outcome
            Assert.IsAssignableFrom <ISpecimenBuilder>(sut);
            // Teardown
        }
Exemple #7
0
        public void CreationOnFullRangeShouldNotFail(Type type, object minimum, object maximum)
        {
            // Arrange
            var request      = new RangedNumberRequest(type, minimum, maximum);
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();

            // Act & Assert
            Assert.Null(Record.Exception(() => sut.Create(request, dummyContext)));
        }
Exemple #8
0
        public void CreateWithNullRequestReturnsCorrectResult()
        {
            // Arrange
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();
            // Act
            var result = sut.Create(null, dummyContext);

            // Assert
            Assert.Equal(new NoSpecimen(), result);
        }
        public void CreateWithNullRequestReturnsCorrectResult()
        {
            // Fixture setup
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();
            // Exercise system
            var result = sut.Create(null, dummyContext);

            // Verify outcome
            Assert.Equal(new NoSpecimen(), result);
            // Teardown
        }
Exemple #10
0
        public void CreateWithNonnumericLimitsReturnsNoSpecimen(Type operandType, object minimum, object maximum)
        {
            // Arrange
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();
            var request      = new RangedNumberRequest(operandType, minimum, maximum);
            // Act
            var result = sut.Create(request, dummyContext);

            // Verify
            Assert.Equal(new NoSpecimen(), result);
        }
        public void CreationOnFullRangeShouldNotFail(Type type, object minimum, object maximum)
        {
            // Fixture setup
            var request      = new RangedNumberRequest(type, minimum, maximum);
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();

            // Excercise System And Verify
            Assert.Null(Record.Exception(() => sut.Create(request, dummyContext)));

            // Teardown
        }
Exemple #12
0
        public void CreationWithLimitsInBoundariesShouldReturnValueInRange(Type type, object minimum, object maximum)
        {
            // Arrange
            var request      = new RangedNumberRequest(type, minimum, maximum);
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();

            // Act
            var result = (IComparable)sut.Create(request, dummyContext);

            // Assert
            Assert.InRange(result, (IComparable)minimum, (IComparable)maximum);
        }
Exemple #13
0
        public void CreationOnFullRangeShouldReturnValue(Type type, object minimum, object maximum)
        {
            // Arrange
            var request      = new RangedNumberRequest(type, minimum, maximum);
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();

            // Act
            var result = sut.Create(request, dummyContext);

            // Assert
            Assert.IsType(type, result);
        }
Exemple #14
0
        public void ShouldCorrectlyHandleRequestsWithSameMinimumAndMaximumValue(Type type)
        {
            // Arrange
            var range        = Convert.ChangeType(42, type, CultureInfo.InvariantCulture);
            var sut          = new RandomRangedNumberGenerator();
            var request      = new RangedNumberRequest(type, range, range);
            var dummyContext = new DelegatingSpecimenContext();

            // Act
            var result = sut.Create(request, dummyContext);

            // Assert
            Assert.Equal(range, result);
        }
        public void CreateWithNonnumericLimitsReturnsNoSpecimen(Type operandType, object minimum, object maximum)
        {
            // Fixture setup
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();
            var request      = new RangedNumberRequest(operandType, minimum, maximum);
            // Exercise system
            var result = sut.Create(request, dummyContext);

            // Verify
#pragma warning disable 618
            Assert.Equal(new NoSpecimen(request), result);
#pragma warning restore 618
        }
        public void CreationWithLimitsInBoundariesShouldReturnValueInRange(Type type, object minimum, object maximum)
        {
            // Fixture setup
            var request      = new RangedNumberRequest(type, minimum, maximum);
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();

            // Excercise System
            var result = (IComparable)sut.Create(request, dummyContext);

            // Verify
            Assert.InRange(result, (IComparable)minimum, (IComparable)maximum);

            // Teardown
        }
        public void ShouldCorrectlyHandleRequestsWithSameMinimumAndMaximumValue(Type type)
        {
            // Fixture setup
            var range        = Convert.ChangeType(42, type, CultureInfo.InvariantCulture);
            var sut          = new RandomRangedNumberGenerator();
            var request      = new RangedNumberRequest(type, range, range);
            var dummyContext = new DelegatingSpecimenContext();

            // Exercise system
            var result = sut.Create(request, dummyContext);

            // Verify outcome
            Assert.Equal(range, result);
            // Teardown
        }
        public void CreateWithAnonymousRequestReturnsCorrectResult()
        {
            // Fixture setup
            var sut          = new RandomRangedNumberGenerator();
            var dummyRequest = new object();
            var dummyContext = new DelegatingSpecimenContext();
            // Exercise system
            var result = sut.Create(dummyRequest, dummyContext);

            // Verify outcome
#pragma warning disable 618
            Assert.Equal(new NoSpecimen(dummyRequest), result);
#pragma warning restore 618
            // Teardown
        }
        public void CreationOnFullRangeShouldReturnValue(Type type, object minimum, object maximum)
        {
            // Fixture setup
            var request      = new RangedNumberRequest(type, minimum, maximum);
            var sut          = new RandomRangedNumberGenerator();
            var dummyContext = new DelegatingSpecimenContext();

            // Excercise System
            var result = sut.Create(request, dummyContext);

            // Verify
            Assert.IsType(type, result);

            // Teardown
        }
Exemple #20
0
        public void CreateReturnsValuesFromCorrectSetForTwoRequestsOfSameTypeAndDifferentLimits()
        {
            // Arrange
            var request1 = new RangedNumberRequest(typeof(int), 0, 2);
            var request2 = new RangedNumberRequest(typeof(int), 10, 20);

            var dummyContext = new DelegatingSpecimenContext();

            var sut = new RandomRangedNumberGenerator();

            // Act
            var value1 = (int)sut.Create(request1, dummyContext);
            var value2 = (int)sut.Create(request2, dummyContext);
            var value3 = (int)sut.Create(request1, dummyContext);

            // Verify
            Assert.InRange(value1, 0, 2);
            Assert.InRange(value2, 10, 20);
            Assert.InRange(value3, 0, 2);
        }
Exemple #21
0
        public void CreateReturnsAllValuesInSetBeforeRepeating()
        {
            // Arrange
            int minimum = 0;
            int maximum = 2;

            var request = new RangedNumberRequest(typeof(int), minimum, maximum);

            var dummyContext = new DelegatingSpecimenContext();

            var sut = new RandomRangedNumberGenerator();

            // Act
            var generatedValues       = Enumerable.Range(0, 3).Select(i => sut.Create(request, dummyContext)).Cast <int>();
            var shouldBeRepeatedValue = (int)sut.Create(request, dummyContext);

            // Verify
            Assert.True(generatedValues.All(a => a >= minimum && a <= maximum));
            Assert.InRange(shouldBeRepeatedValue, minimum, maximum);
        }
Exemple #22
0
        public void CreateReturnsCorrectValuesForRequestsOfSameTypeAndSingleSharedLimit
            (int request1Min, int request1Max, int request1FirstGroup, int request1SecondGroup,
            int request2Min, int request2Max, int request2FirstGroup, int request2SecondGroup,
            int request3Min, int request3Max, int request3FirstGroup, int request3SecondGroup)
        {
            // Arrange
            int request1Count = request1Max - request1Min + 1;
            int request2Count = request2Max - request2Min + 1;
            int request3Count = request3Max - request3Min + 1;

            var request1 = new RangedNumberRequest(typeof(int), request1Min, request1Max);
            var request2 = new RangedNumberRequest(typeof(int), request2Min, request2Max);
            var request3 = new RangedNumberRequest(typeof(int), request3Min, request3Max);

            IDictionary <RangedNumberRequest, IList <int> > results = new Dictionary <RangedNumberRequest, IList <int> >()
            {
                { request1, new List <int>() }, { request2, new List <int>() }, { request3, new List <int>() }
            };

            var dummyContext = new DelegatingSpecimenContext();

            var sut = new RandomRangedNumberGenerator();

            // Act
            results[request1].AddMany(() => (int)sut.Create(request1, dummyContext), request1FirstGroup);
            results[request2].AddMany(() => (int)sut.Create(request2, dummyContext), request2FirstGroup);
            results[request3].AddMany(() => (int)sut.Create(request3, dummyContext), request3FirstGroup);
            results[request1].AddMany(() => (int)sut.Create(request1, dummyContext), request1SecondGroup);
            results[request2].AddMany(() => (int)sut.Create(request2, dummyContext), request2SecondGroup);
            results[request3].AddMany(() => (int)sut.Create(request3, dummyContext), request3SecondGroup);

            // Verify
            Assert.True(Enumerable.Range(request1Min, request1Count)
                        .Intersect(results[request1]).Count() == request1Count);
            Assert.True(Enumerable.Range(request2Min, request2Count)
                        .Intersect(results[request2]).Count() == request2Count);
            Assert.True(Enumerable.Range(request3Min, request3Count)
                        .Intersect(results[request3]).Count() == request3Count);
        }
Exemple #23
0
        public void CreateReturnsValuesFromCorrectSetForMultipleRequestsWithInterspersedDifferentRequestOfSameType()
        {
            // Arrange
            var request1 = new RangedNumberRequest(typeof(int), 0, 2);
            var request2 = new RangedNumberRequest(typeof(int), 10, 20);
            var request3 = new RangedNumberRequest(typeof(int), 0, 2);

            var dummyContext = new DelegatingSpecimenContext();

            var sut = new RandomRangedNumberGenerator();

            // Act
            var value1 = (int)sut.Create(request1, dummyContext);
            var value2 = (int)sut.Create(request2, dummyContext);
            var value3 = (int)sut.Create(request3, dummyContext);

            // Verify
            Assert.InRange(value1, 0, 2);
            Assert.InRange(value2, 10, 20);
            Assert.InRange(value3, 0, 2);
            Assert.NotEqual(value1, value3);
        }
        public static Person CreateDatabasePersonEntity(string firstname = null, string lastname = null, string houseRef = null, int?personNo = null)
        {
            //Generate integers for house_ref column
            var rrng = new RandomRangedNumberGenerator();
            var sc   = new SpecimenContext(rrng);

            rrng.Create(new RangedNumberRequest(typeof(int), 100000, 999999), sc);

            var fixture = new Fixture();

            fixture.Customizations.Add(rrng);
            var fp = fixture.Build <Person>()
                     .Create();

            fp.DateOfBirth = new DateTime
                                 (fp.DateOfBirth.Year, fp.DateOfBirth.Month, fp.DateOfBirth.Day);
            fp.FirstName = firstname ?? fp.FirstName;
            fp.LastName  = lastname ?? fp.LastName;
            fp.HouseRef  = houseRef ?? fixture.Create <int>().ToString();
            fp.PersonNo  = personNo ?? fp.PersonNo;

            return(fp);
        }