Skip to content

Commit 029d200

Browse files
committed
Merge pull request #5 from mwhelan/anonymous-values
Data sources, random/sequential generators, Equivalence classes
2 parents a185fdc + 8a709c4 commit 029d200

19 files changed

Lines changed: 732 additions & 1 deletion

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ _ReSharper.*
99
*~
1010
*.log
1111
packages
12-
*.DotSettings
12+
*.DotSettings
13+
*.ncrunchproject
14+
*.ncrunchsolution
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using NTestDataBuilder.DataSources;
4+
using NTestDataBuilder.DataSources.Generators;
5+
using Shouldly;
6+
using Xunit;
7+
8+
namespace NTestDataBuilder.Tests.DataSources
9+
{
10+
public class DataSourceTests
11+
{
12+
[Fact]
13+
public void WhenCreatingADataSource_ThenListShouldContainAllTheValues()
14+
{
15+
var sut = new DummyDataSource();
16+
17+
var result = sut.List;
18+
19+
result.Count.ShouldBe(3);
20+
result.ShouldBe(new List<string> { "Value 1", "Value 2", "Value 3" });
21+
}
22+
23+
[Fact]
24+
public void WhenGeneratingValuesFromDefaultDataSource_ThenShouldGenerateItemFromList()
25+
{
26+
var sut = new DummyDataSource();
27+
var result = sut.Next();
28+
sut.List.ShouldContain(result);
29+
}
30+
31+
[Fact]
32+
public void WhenGeneratingValuesFromDefaultDataSource_ThenShouldGenerateRandomItemsFromList()
33+
{
34+
var sut = new DummyDataSource();
35+
36+
var results = new List<string>();
37+
for (int i = 0; i < 10; i++)
38+
{
39+
results.Add(sut.Next());
40+
}
41+
42+
foreach (var item in sut.List)
43+
{
44+
results.ShouldContain(item);
45+
}
46+
}
47+
48+
[Fact]
49+
public void WhenGeneratingValuesFromSequentialDataSource_ThenShouldGenerateSequentialItems()
50+
{
51+
var sut = new DummyDataSource(new SequentialGenerator());
52+
53+
sut.Next().ShouldBe(sut.List[0]);
54+
sut.Next().ShouldBe(sut.List[1]);
55+
sut.Next().ShouldBe(sut.List[2]);
56+
sut.Next().ShouldBe(sut.List[0]);
57+
}
58+
59+
[Fact]
60+
public void WhenGeneratingValuesFromUniqueSequentialDataSource_ThenShouldThrowWhenCollectionExceeded()
61+
{
62+
var sut = new DummyDataSource(new SequentialGenerator(0,1,true));
63+
64+
sut.Next().ShouldBe(sut.List[0]);
65+
sut.Next().ShouldBe(sut.List[1]);
66+
sut.Next().ShouldBe(sut.List[2]);
67+
Should.Throw<InvalidOperationException>(() => sut.Next());
68+
}
69+
70+
[Fact]
71+
public void WhenGeneratingValuesFromPersonDataSource_ThenShouldHave500Records()
72+
{
73+
new FirstNameSource().List.Count.ShouldBe(500);
74+
new LastNameSource().List.Count.ShouldBe(500);
75+
new FullNameSource().List.Count.ShouldBe(500);
76+
}
77+
}
78+
79+
public class DummyDataSource : DataSource<string>
80+
{
81+
public DummyDataSource(IGenerator generator)
82+
: base(generator) { }
83+
84+
public DummyDataSource()
85+
: this(new RandomGenerator()) { }
86+
87+
protected override IList<string> InitializeList()
88+
{
89+
return new List<string>{"Value 1", "Value 2", "Value 3"};
90+
}
91+
}
92+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using NTestDataBuilder.DataSources.Generators;
4+
using Shouldly;
5+
using Xunit;
6+
using Xunit.Extensions;
7+
8+
namespace NTestDataBuilder.Tests.DataSources.Generators
9+
{
10+
public class RandomGeneratorTests
11+
{
12+
[Theory,
13+
InlineData(5,4),
14+
InlineData(5,5)]
15+
public void WhenCreatingRandomGenerator_ThenStartIndexMustBeLessThanListSize(int startIndex, int listSize)
16+
{
17+
Action factory = () => new RandomGenerator(startIndex, listSize);
18+
Should.Throw<ArgumentException>(factory)
19+
.Message.ShouldBe(string.Format("startIndex must be less than listSize"));
20+
}
21+
22+
[Fact]
23+
public void WhenGeneratingRandomIntegers_ThenShouldAlwaysGenerateIntegerBetweenStartIndexAndListSize()
24+
{
25+
var random = new Random();
26+
for (int i = 0; i < 10; i++)
27+
{
28+
int minimumValue = random.Next(0,10);
29+
int maximumValue = random.Next(20,30);
30+
var sut = new RandomGenerator(minimumValue, maximumValue);
31+
32+
var result = sut.Generate();
33+
34+
result.ShouldBeGreaterThanOrEqualTo(minimumValue);
35+
result.ShouldBeLessThanOrEqualTo(maximumValue);
36+
}
37+
}
38+
39+
[Fact]
40+
public void WhenGeneratingRandomIntegers_ThenShouldBeAbleToGenerateLowerBoundaryValue()
41+
{
42+
var results = new List<int>();
43+
var sut = new RandomGenerator(0, 3);
44+
for (int i = 0; i < 10; i++)
45+
{
46+
results.Add(sut.Generate());
47+
}
48+
results.ShouldContain(0);
49+
}
50+
51+
[Fact]
52+
public void WhenGeneratingRandomIntegers_ThenShouldBeAbleToGenerateUpperBoundaryValue()
53+
{
54+
var results = new List<int>();
55+
var sut = new RandomGenerator(0, 3);
56+
for (int i = 0; i < 10; i++)
57+
{
58+
results.Add(sut.Generate());
59+
}
60+
results.ShouldContain(2);
61+
results.ShouldNotContain(3);
62+
}
63+
64+
65+
}
66+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using System;
2+
using NTestDataBuilder.DataSources.Generators;
3+
using Shouldly;
4+
using Xunit;
5+
using Xunit.Extensions;
6+
7+
namespace NTestDataBuilder.Tests.DataSources.Generators
8+
{
9+
public class SequentiaGeneratorTests
10+
{
11+
[Theory,
12+
InlineData(5, 4),
13+
InlineData(5, 5)]
14+
public void WhenCreatingRandomGenerator_ThenStartIndexMustBeLessThanListSize(int startIndex, int listSize)
15+
{
16+
Action factory = () => new SequentialGenerator(startIndex, listSize);
17+
Should.Throw<ArgumentException>(factory)
18+
.Message.ShouldBe(string.Format("startIndex must be less than listSize"));
19+
}
20+
21+
[Fact]
22+
public void WhenCreatingRandomGenerator_ThenStartIndexMustBeZeroOrMore()
23+
{
24+
Action factory = () => new SequentialGenerator(-1, 1);
25+
Should.Throw<ArgumentException>(factory)
26+
.Message.ShouldBe(string.Format("startIndex must be zero or more"));
27+
}
28+
29+
[Theory,
30+
InlineData(0, 0),
31+
InlineData(0, -1)]
32+
public void WhenCreatingRandomGenerator_ThenListSizeMustBeGreaterThanZero(int startIndex, int listSize)
33+
{
34+
Action factory = () => new SequentialGenerator(startIndex, listSize);
35+
Should.Throw<ArgumentException>(factory)
36+
.Message.ShouldBe(string.Format("listSize must be greater than zero"));
37+
}
38+
39+
40+
[Fact]
41+
public void WhenGeneratingIntegers_ThenShouldBeSequential()
42+
{
43+
var sut = new SequentialGenerator(0, 11);
44+
for (int index = sut.StartIndex; index < sut.ListSize; index++)
45+
{
46+
sut.Generate().ShouldBe(index);
47+
}
48+
}
49+
50+
[Fact]
51+
public void GivenGeneratorIsNotUnique_WhenGeneratingIntegers_ThenShouldResetAtEndOfList()
52+
{
53+
var sut = new SequentialGenerator(0, 2);
54+
for (int index = sut.StartIndex; index < sut.ListSize; index++)
55+
{
56+
sut.Generate().ShouldBe(index);
57+
}
58+
59+
sut.Generate().ShouldBe(sut.StartIndex);
60+
}
61+
62+
[Fact]
63+
public void GivenGeneratorIsUnique_WhenGeneratingIntegers_ThenShouldResetAtEndOfList()
64+
{
65+
var sut = new SequentialGenerator(0, 2, true);
66+
for (int index = sut.StartIndex; index < sut.ListSize; index++)
67+
{
68+
sut.Generate().ShouldBe(index);
69+
}
70+
71+
Should.Throw<InvalidOperationException>(()=>sut.Generate())
72+
.Message.ShouldBe("There are not enough elements in the data source to continue adding items");
73+
}
74+
75+
76+
}
77+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using NTestDataBuilder.DataSources;
4+
using NTestDataBuilder.EquivalenceClasses;
5+
using Shouldly;
6+
using Xunit;
7+
8+
namespace NTestDataBuilder.Tests.EquivalenceClasses
9+
{
10+
public class CompanyEquivalenceClassTests
11+
{
12+
public AnonymousValueFixture Any { get; private set; }
13+
14+
public CompanyEquivalenceClassTests()
15+
{
16+
Any = new AnonymousValueFixture();
17+
}
18+
19+
[Fact]
20+
public void WhenGettingAnyCountry_ThenReturnRandomCompanyWhichIsReasonablyUnique()
21+
{
22+
var companySource = new CompanySource();
23+
24+
var results = new List<string>();
25+
for (int i = 0; i < 10; i++)
26+
{
27+
results.Add(Any.Company());
28+
}
29+
30+
foreach (var result in results)
31+
{
32+
result.ShouldBeOfType<string>();
33+
result.ShouldNotBeNullOrEmpty();
34+
companySource.List.ShouldContain(result);
35+
}
36+
var unique = results.Distinct().Count();
37+
unique.ShouldBeGreaterThan(5);
38+
}
39+
}
40+
}

NTestDataBuilder.Tests/NTestDataBuilder.Tests.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,15 @@
4747
<Reference Include="xunit">
4848
<HintPath>..\packages\xunit.1.9.2\lib\net20\xunit.dll</HintPath>
4949
</Reference>
50+
<Reference Include="xunit.extensions">
51+
<HintPath>..\packages\xunit.extensions.1.9.2\lib\net20\xunit.extensions.dll</HintPath>
52+
</Reference>
5053
</ItemGroup>
5154
<ItemGroup>
55+
<Compile Include="DataSources\DataSourceTests.cs" />
56+
<Compile Include="DataSources\Generators\RandomGeneratorTests.cs" />
57+
<Compile Include="DataSources\Generators\SequentiaGeneratorTests.cs" />
58+
<Compile Include="EquivalenceClasses\CompanyEquivalenceClassTests.cs" />
5259
<Compile Include="EquivalenceClasses\StringEquivalenceClassesTests.cs" />
5360
<Compile Include="AsProxyTests.cs" />
5461
<Compile Include="BuildListTests.cs" />

NTestDataBuilder.Tests/packages.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
<package id="NSubstitute" version="1.7.2.0" targetFramework="net40" />
55
<package id="Shouldly" version="2.2.0" targetFramework="net40" />
66
<package id="xunit" version="1.9.2" targetFramework="net40" />
7+
<package id="xunit.extensions" version="1.9.2" targetFramework="net40" />
78
</packages>

0 commit comments

Comments
 (0)