Skip to content

Commit 7632277

Browse files
committed
Updated PR to apply Rob's suggestions.
1 parent 48efca4 commit 7632277

20 files changed

Lines changed: 186 additions & 110 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Prior to v2.0 this library was known as NTestDataBuilder.
7979
}
8080
}
8181

82-
Note that you can optionally override the `BuildObject` method if you want full control over how your object is constructed, for example if you want to use a particular constructor. If you don't provide this then Dossier will create the object for you.
82+
Note that overriding the BuildObject is optional. It can be useful to do this if you want full control over how your object is constructed, for example if you want to use a particular constructor. If you don't choose to override this method then Dossier will create the object for you.
8383

8484
3. Use the builder in a test, e.g.
8585

TestStack.Dossier.Tests/BuildListTests.cs

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using TestStack.Dossier.DataSources.Generators;
55
using TestStack.Dossier.Lists;
66
using TestStack.Dossier.Tests.Builders;
7-
using TestStack.Dossier.Tests.Entities;
7+
using TestStack.Dossier.Tests.Stubs.Entities;
88
using Xunit;
99

1010
namespace TestStack.Dossier.Tests
@@ -70,33 +70,15 @@ public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfUnique
7070

7171
var entities = builders.BuildList();
7272

73-
entities[0].ShouldNotBe(entities[1]);
74-
entities[0].ShouldNotBe(entities[2]);
75-
entities[0].ShouldNotBe(entities[3]);
76-
entities[0].ShouldNotBe(entities[4]);
77-
entities[1].ShouldNotBe(entities[2]);
78-
entities[1].ShouldNotBe(entities[3]);
79-
entities[1].ShouldNotBe(entities[4]);
80-
entities[2].ShouldNotBe(entities[3]);
81-
entities[2].ShouldNotBe(entities[4]);
82-
entities[3].ShouldNotBe(entities[4]);
73+
entities.ShouldBeUnique();
8374
}
8475

8576
[Fact]
8677
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfUniqueEntitiesShouldBeReturned()
8778
{
8879
List<Customer> entities = BasicCustomerBuilder.CreateListOfSize(5);
8980

90-
entities[0].ShouldNotBe(entities[1]);
91-
entities[0].ShouldNotBe(entities[2]);
92-
entities[0].ShouldNotBe(entities[3]);
93-
entities[0].ShouldNotBe(entities[4]);
94-
entities[1].ShouldNotBe(entities[2]);
95-
entities[1].ShouldNotBe(entities[3]);
96-
entities[1].ShouldNotBe(entities[4]);
97-
entities[2].ShouldNotBe(entities[3]);
98-
entities[2].ShouldNotBe(entities[4]);
99-
entities[3].ShouldNotBe(entities[4]);
81+
entities.ShouldBeUnique();
10082
}
10183

10284
[Fact]

TestStack.Dossier.Tests/BuildTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using Shouldly;
22
using TestStack.Dossier.Tests.Builders;
3-
using TestStack.Dossier.Tests.Entities;
3+
using TestStack.Dossier.Tests.Stubs.Entities;
44
using Xunit;
55

66
namespace TestStack.Dossier.Tests
Lines changed: 45 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using Shouldly;
45
using TestStack.Dossier.DataSources.Generators;
56
using TestStack.Dossier.Lists;
67
using TestStack.Dossier.Tests.Builders;
7-
using TestStack.Dossier.Tests.Entities;
8+
using TestStack.Dossier.Tests.Stubs.ViewModels;
89
using Xunit;
910

1011
namespace TestStack.Dossier.Tests
1112
{
1213
public class BuilderBuildListTests
1314
{
15+
private DateTime _enrollmentDate = new DateTime(2004, 9, 9);
16+
1417
[Fact]
1518
public void GivenANormalBuilderInstance_WhenCallingIsListBuilderProxy_ThenReturnFalse()
1619
{
17-
var builder = Builder<Customer>.CreateNew();
20+
var builder = Builder<StudentViewModel>.CreateNew();
1821

1922
builder.IsListBuilderProxy().ShouldBe(false);
2023
}
2124

2225
[Fact]
2326
public void GivenAListBuilderProxyInstance_WhenCallingIsListBuilderProxy_ThenReturnTrue()
2427
{
25-
var builder = Builder<Customer>.CreateListOfSize(1).TheFirst(1);
28+
var builder = Builder<StudentViewModel>.CreateListOfSize(1).TheFirst(1);
2629

2730
builder.IsListBuilderProxy().ShouldBe(true);
2831
}
2932

3033
[Fact]
3134
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfEntitiesOfTheRightSizeShouldBeReturned()
3235
{
33-
var builders = Builder<Customer>.CreateListOfSize(5);
36+
var builders = Builder<StudentViewModel>.CreateListOfSize(5);
3437

3538
var entities = builders.BuildList();
3639

@@ -40,70 +43,52 @@ public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfEntiti
4043
[Fact]
4144
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfEntitiesOfTheRightSizeShouldBeReturned()
4245
{
43-
List<Customer> entities = Builder<Customer>.CreateListOfSize(5);
46+
List<StudentViewModel> entities = Builder<StudentViewModel>.CreateListOfSize(5);
4447

4548
entities.Count.ShouldBe(5);
4649
}
4750

4851
[Fact]
4952
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfEntitiesOfTheRightTypeShouldBeReturned()
5053
{
51-
var builders = Builder<Customer>.CreateListOfSize(5);
54+
var builders = Builder<StudentViewModel>.CreateListOfSize(5);
5255

5356
var entities = builders.BuildList();
5457

55-
entities.ShouldBeAssignableTo<IList<Customer>>();
58+
entities.ShouldBeAssignableTo<IList<StudentViewModel>>();
5659
}
5760

5861
[Fact]
5962
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfEntitiesOfTheRightTypeShouldBeReturned()
6063
{
61-
List<Customer> entities = Builder<Customer>.CreateListOfSize(5);
64+
List<StudentViewModel> entities = Builder<StudentViewModel>.CreateListOfSize(5);
6265

63-
entities.ShouldBeAssignableTo<IList<Customer>>();
66+
entities.ShouldBeAssignableTo<IList<StudentViewModel>>();
6467
}
6568

6669
[Fact]
6770
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfUniqueEntitiesShouldBeReturned()
6871
{
69-
var builders = Builder<Customer>.CreateListOfSize(5);
72+
var builders = Builder<StudentViewModel>.CreateListOfSize(5);
7073

7174
var entities = builders.BuildList();
7275

73-
entities[0].ShouldNotBe(entities[1]);
74-
entities[0].ShouldNotBe(entities[2]);
75-
entities[0].ShouldNotBe(entities[3]);
76-
entities[0].ShouldNotBe(entities[4]);
77-
entities[1].ShouldNotBe(entities[2]);
78-
entities[1].ShouldNotBe(entities[3]);
79-
entities[1].ShouldNotBe(entities[4]);
80-
entities[2].ShouldNotBe(entities[3]);
81-
entities[2].ShouldNotBe(entities[4]);
82-
entities[3].ShouldNotBe(entities[4]);
76+
entities.ShouldBeUnique();
8377
}
8478

8579
[Fact]
8680
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfUniqueEntitiesShouldBeReturned()
8781
{
88-
List<Customer> entities = Builder<Customer>.CreateListOfSize(5);
89-
90-
entities[0].ShouldNotBe(entities[1]);
91-
entities[0].ShouldNotBe(entities[2]);
92-
entities[0].ShouldNotBe(entities[3]);
93-
entities[0].ShouldNotBe(entities[4]);
94-
entities[1].ShouldNotBe(entities[2]);
95-
entities[1].ShouldNotBe(entities[3]);
96-
entities[1].ShouldNotBe(entities[4]);
97-
entities[2].ShouldNotBe(entities[3]);
98-
entities[2].ShouldNotBe(entities[4]);
99-
entities[3].ShouldNotBe(entities[4]);
82+
List<StudentViewModel> entities = Builder<StudentViewModel>.CreateListOfSize(5);
83+
84+
entities.ShouldBeUnique();
10085
}
10186

10287
[Fact]
10388
public void GivenListOfBuildersWithCustomisation_WhenBuildingEntitiesExplicitly_ThenTheCustomisationShouldTakeEffect()
10489
{
10590
var generator = new SequentialGenerator(0, 100);
106-
var list = CustomerBuilder.CreateListOfSize(3)
91+
var list = StudentViewModelBuilder.CreateListOfSize(3)
10792
.All().With(b => b.WithFirstName(generator.Generate().ToString()));
10893

10994
var data = list.BuildList();
@@ -117,7 +102,7 @@ public void GivenListOfBuildersWithCustomisation_WhenBuildingEntitiesImplicitly_
117102
{
118103
var generator = new SequentialGenerator(0, 100);
119104

120-
List<Customer> data = CustomerBuilder.CreateListOfSize(3)
105+
List<StudentViewModel> data = StudentViewModelBuilder.CreateListOfSize(3)
121106
.All().With(b => b.WithFirstName(generator.Generate().ToString()));
122107

123108
data.Select(c => c.FirstName).ToArray()
@@ -128,67 +113,59 @@ public void GivenListOfBuildersWithCustomisation_WhenBuildingEntitiesImplicitly_
128113
public void GivenListOfBuildersWithARangeOfCustomisationMethods_WhenBuildingEntitiesExplicitly_ThenThenTheListIsBuiltAndModifiedCorrectly()
129114
{
130115
var i = 0;
131-
var customers = CustomerBuilder.CreateListOfSize(5)
116+
var studentViewModels = StudentViewModelBuilder.CreateListOfSize(5)
132117
.TheFirst(1).WithFirstName("First")
133118
.TheNext(1).WithLastName("Next Last")
134119
.TheLast(1).WithLastName("Last Last")
135120
.ThePrevious(2).With(b => b.WithLastName("last" + (++i).ToString()))
136-
.All().WhoJoinedIn(1999)
121+
.All().WhoEntrolledIn(_enrollmentDate)
137122
.BuildList();
138123

139-
customers.ShouldBeAssignableTo<IList<Customer>>();
140-
customers.Count.ShouldBe(5);
141-
customers[0].FirstName.ShouldBe("First");
142-
customers[1].LastName.ShouldBe("Next Last");
143-
customers[2].LastName.ShouldBe("last1");
144-
customers[3].LastName.ShouldBe("last2");
145-
customers[4].LastName.ShouldBe("Last Last");
146-
customers.ShouldAllBe(c => c.YearJoined == 1999);
124+
studentViewModels.ShouldBeAssignableTo<IList<StudentViewModel>>();
125+
studentViewModels.Count.ShouldBe(5);
126+
studentViewModels[0].FirstName.ShouldBe("First");
127+
studentViewModels[1].LastName.ShouldBe("Next Last");
128+
studentViewModels[2].LastName.ShouldBe("last1");
129+
studentViewModels[3].LastName.ShouldBe("last2");
130+
studentViewModels[4].LastName.ShouldBe("Last Last");
131+
studentViewModels.ShouldAllBe(c => c.EnrollmentDate == _enrollmentDate);
147132
}
148133

149134
[Fact]
150135
public void GivenListOfBuildersWithARangeOfCustomisationMethods_WhenBuildingEntitiesImplicitly_ThenThenTheListIsBuiltAndModifiedCorrectly()
151136
{
152137
var i = 0;
153-
List<Customer> customers = CustomerBuilder.CreateListOfSize(5)
138+
List<StudentViewModel> studentViewModels = StudentViewModelBuilder.CreateListOfSize(5)
154139
.TheFirst(1).WithFirstName("First")
155140
.TheNext(1).WithLastName("Next Last")
156141
.TheLast(1).WithLastName("Last Last")
157142
.ThePrevious(2).With(b => b.WithLastName("last" + (++i).ToString()))
158-
.All().WhoJoinedIn(1999);
159-
160-
customers.ShouldBeAssignableTo<IList<Customer>>();
161-
customers.Count.ShouldBe(5);
162-
customers[0].FirstName.ShouldBe("First");
163-
customers[1].LastName.ShouldBe("Next Last");
164-
customers[2].LastName.ShouldBe("last1");
165-
customers[3].LastName.ShouldBe("last2");
166-
customers[4].LastName.ShouldBe("Last Last");
167-
customers.ShouldAllBe(c => c.YearJoined == 1999);
143+
.All().WhoEntrolledIn(_enrollmentDate);
144+
145+
studentViewModels.ShouldBeAssignableTo<IList<StudentViewModel>>();
146+
studentViewModels.Count.ShouldBe(5);
147+
studentViewModels[0].FirstName.ShouldBe("First");
148+
studentViewModels[1].LastName.ShouldBe("Next Last");
149+
studentViewModels[2].LastName.ShouldBe("last1");
150+
studentViewModels[3].LastName.ShouldBe("last2");
151+
studentViewModels[4].LastName.ShouldBe("Last Last");
152+
studentViewModels.ShouldAllBe(c => c.EnrollmentDate == _enrollmentDate);
168153
}
169154

170155
[Fact]
171156
public void WhenBuildingEntitiesExplicitly_ThenTheAnonymousValueFixtureIsSharedAcrossBuilders()
172157
{
173-
var customers = CustomerBuilder.CreateListOfSize(5).BuildList();
158+
var studentViewModels = StudentViewModelBuilder.CreateListOfSize(5).BuildList();
174159

175-
customers[0].CustomerClass.ShouldBe(CustomerClass.Normal);
176-
customers[1].CustomerClass.ShouldBe(CustomerClass.Bronze);
177-
customers[2].CustomerClass.ShouldBe(CustomerClass.Silver);
178-
customers[3].CustomerClass.ShouldBe(CustomerClass.Gold);
179-
customers[4].CustomerClass.ShouldBe(CustomerClass.Platinum);
160+
studentViewModels.Select(x => x.Grade).ShouldBeUnique();
180161
}
181162

182163
[Fact]
183164
public void WhenBuildingEntitiesImplicitly_ThenTheAnonymousValueFixtureIsSharedAcrossBuilders()
184165
{
185-
List<Customer> customers = CustomerBuilder.CreateListOfSize(5);
166+
List<StudentViewModel> studentViewModels = StudentViewModelBuilder.CreateListOfSize(5);
186167

187-
customers[0].CustomerClass.ShouldBe(CustomerClass.Normal);
188-
customers[1].CustomerClass.ShouldBe(CustomerClass.Bronze);
189-
customers[2].CustomerClass.ShouldBe(CustomerClass.Silver);
190-
customers[3].CustomerClass.ShouldBe(CustomerClass.Gold);
191-
customers[4].CustomerClass.ShouldBe(CustomerClass.Platinum);
168+
studentViewModels.Select(x => x.Grade).ShouldBeUnique();
192169
}
193170
}
194171
}

TestStack.Dossier.Tests/BuilderBuildTests.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Shouldly;
22
using TestStack.Dossier.Tests.Builders;
3-
using TestStack.Dossier.Tests.Entities;
3+
using TestStack.Dossier.Tests.Stubs.Entities;
4+
using TestStack.Dossier.Tests.Stubs.ViewModels;
45
using Xunit;
56

67
namespace TestStack.Dossier.Tests
@@ -52,5 +53,18 @@ public void GivenBuilder_WhenCallingSetImplicitly_ShouldOverrideValues()
5253
customer.LastName.ShouldBe("Lanningham");
5354
customer.YearJoined.ShouldBe(2014);
5455
}
56+
57+
[Fact]
58+
public void GivenBuilder_WhenBuildingObjectWithCtorAndPrivateSetters_ShouldSetPrivateSetters()
59+
{
60+
InstructorViewModel instructor = Builder<InstructorViewModel>.CreateNew()
61+
.Set(x => x.FirstName, "Pi")
62+
.Set(x => x.LastName, "Lanningham")
63+
.Set(x => x.Id, 5);
64+
65+
instructor.FirstName.ShouldBe("Pi");
66+
instructor.LastName.ShouldBe("Lanningham");
67+
instructor.Id.ShouldBe(5);
68+
}
5569
}
5670
}

TestStack.Dossier.Tests/Builders/BasicCustomerBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
22
using System.Linq.Expressions;
3-
using TestStack.Dossier.Tests.Entities;
3+
using TestStack.Dossier.Tests.Stubs.Entities;
44

55
namespace TestStack.Dossier.Tests.Builders
66
{

TestStack.Dossier.Tests/Builders/CustomerBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using TestStack.Dossier.Tests.Entities;
1+
using TestStack.Dossier.Tests.Stubs.Entities;
22

33
namespace TestStack.Dossier.Tests.Builders
44
{

TestStack.Dossier.Tests/Builders/ProxyAlteringCustomerBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
22
using NSubstitute;
3-
using TestStack.Dossier.Tests.Entities;
3+
using TestStack.Dossier.Tests.Stubs.Entities;
44

55
namespace TestStack.Dossier.Tests.Builders
66
{
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using TestStack.Dossier.Tests.Stubs.ViewModels;
3+
4+
namespace TestStack.Dossier.Tests.Builders
5+
{
6+
public class StudentViewModelBuilder : TestDataBuilder<StudentViewModel, StudentViewModelBuilder>
7+
{
8+
public virtual StudentViewModelBuilder WithFirstName(string firstName)
9+
{
10+
return Set(x => x.FirstName, firstName);
11+
}
12+
13+
public virtual StudentViewModelBuilder WithLastName(string lastName)
14+
{
15+
return Set(x => x.LastName, lastName);
16+
}
17+
18+
public virtual StudentViewModelBuilder WhoEntrolledIn(DateTime enrollmentDate)
19+
{
20+
return Set(x => x.EnrollmentDate, enrollmentDate);
21+
}
22+
}
23+
}

TestStack.Dossier.Tests/ProxyBuilderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using NSubstitute;
44
using Shouldly;
5-
using TestStack.Dossier.Tests.Entities;
5+
using TestStack.Dossier.Tests.Stubs.Entities;
66
using Xunit;
77

88
namespace TestStack.Dossier.Tests

0 commit comments

Comments
 (0)