Skip to content

Commit 76264c4

Browse files
committed
Cleaned up Builder<T> tests
Also found a bug where Set wasn't virtual so didn't work with list building
1 parent 89164f0 commit 76264c4

20 files changed

+307
-316
lines changed

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ Prior to v2.0 this library was known as NTestDataBuilder.
7979
}
8080
}
8181

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.
83-
8482
3. Use the builder in a test, e.g.
8583

8684
var customer = new CustomerBuilder().WithFirstName("Robert").Build();

TestStack.Dossier.Tests/BuilderBuildTests.cs

Lines changed: 0 additions & 72 deletions
This file was deleted.

TestStack.Dossier.Tests/BuilderBuildListTests.cs renamed to TestStack.Dossier.Tests/Builder_CreateListTests.cs

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
using Shouldly;
55
using TestStack.Dossier.DataSources.Generators;
66
using TestStack.Dossier.Lists;
7-
using TestStack.Dossier.Tests.Builders;
87
using TestStack.Dossier.Tests.Stubs.ViewModels;
98
using Xunit;
109

1110
namespace TestStack.Dossier.Tests
1211
{
13-
public class BuilderBuildListTests
12+
// ReSharper disable once InconsistentNaming
13+
public class Builder_CreateListTests
1414
{
15-
private DateTime _enrollmentDate = new DateTime(2004, 9, 9);
15+
private readonly DateTime _enrollmentDate = new DateTime(2004, 9, 9);
1616

1717
[Fact]
1818
public void GivenANormalBuilderInstance_WhenCallingIsListBuilderProxy_ThenReturnFalse()
@@ -31,65 +31,65 @@ public void GivenAListBuilderProxyInstance_WhenCallingIsListBuilderProxy_ThenRet
3131
}
3232

3333
[Fact]
34-
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfEntitiesOfTheRightSizeShouldBeReturned()
34+
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfObjectsOfTheRightSizeShouldBeReturned()
3535
{
3636
var builders = Builder<StudentViewModel>.CreateListOfSize(5);
3737

38-
var entities = builders.BuildList();
38+
var objects = builders.BuildList();
3939

40-
entities.Count.ShouldBe(5);
40+
objects.Count.ShouldBe(5);
4141
}
4242

4343
[Fact]
44-
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfEntitiesOfTheRightSizeShouldBeReturned()
44+
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfObjectsOfTheRightSizeShouldBeReturned()
4545
{
46-
List<StudentViewModel> entities = Builder<StudentViewModel>.CreateListOfSize(5);
46+
List<StudentViewModel> objects = Builder<StudentViewModel>.CreateListOfSize(5);
4747

48-
entities.Count.ShouldBe(5);
48+
objects.Count.ShouldBe(5);
4949
}
5050

5151
[Fact]
52-
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfEntitiesOfTheRightTypeShouldBeReturned()
52+
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfObjectsOfTheRightTypeShouldBeReturned()
5353
{
5454
var builders = Builder<StudentViewModel>.CreateListOfSize(5);
5555

56-
var entities = builders.BuildList();
56+
var objects = builders.BuildList();
5757

58-
entities.ShouldBeAssignableTo<IList<StudentViewModel>>();
58+
objects.ShouldBeAssignableTo<IList<StudentViewModel>>();
5959
}
6060

6161
[Fact]
62-
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfEntitiesOfTheRightTypeShouldBeReturned()
62+
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfObjectsOfTheRightTypeShouldBeReturned()
6363
{
64-
List<StudentViewModel> entities = Builder<StudentViewModel>.CreateListOfSize(5);
64+
List<StudentViewModel> objects = Builder<StudentViewModel>.CreateListOfSize(5);
6565

66-
entities.ShouldBeAssignableTo<IList<StudentViewModel>>();
66+
objects.ShouldBeAssignableTo<IList<StudentViewModel>>();
6767
}
6868

6969
[Fact]
70-
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfUniqueEntitiesShouldBeReturned()
70+
public void GivenListOfBuilders_WhenCallingBuildListExplicitly_ThenAListOfUniqueObjectsShouldBeReturned()
7171
{
7272
var builders = Builder<StudentViewModel>.CreateListOfSize(5);
7373

74-
var entities = builders.BuildList();
74+
var objects = builders.BuildList();
7575

76-
entities.ShouldBeUnique();
76+
objects.ShouldBeUnique();
7777
}
7878

7979
[Fact]
80-
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfUniqueEntitiesShouldBeReturned()
80+
public void GivenListOfBuilders_WhenCallingBuildListImplicitly_ThenAListOfUniqueObjectsShouldBeReturned()
8181
{
82-
List<StudentViewModel> entities = Builder<StudentViewModel>.CreateListOfSize(5);
82+
List<StudentViewModel> objects = Builder<StudentViewModel>.CreateListOfSize(5);
8383

84-
entities.ShouldBeUnique();
84+
objects.ShouldBeUnique();
8585
}
8686

8787
[Fact]
88-
public void GivenListOfBuildersWithCustomisation_WhenBuildingEntitiesExplicitly_ThenTheCustomisationShouldTakeEffect()
88+
public void GivenListOfBuildersWithCustomisation_WhenBuildingObjectsExplicitly_ThenTheCustomisationShouldTakeEffect()
8989
{
9090
var generator = new SequentialGenerator(0, 100);
91-
var list = StudentViewModelBuilder.CreateListOfSize(3)
92-
.All().With(b => b.WithFirstName(generator.Generate().ToString()));
91+
var list = Builder<StudentViewModel>.CreateListOfSize(3)
92+
.All().With(b => b.Set(x => x.FirstName, generator.Generate().ToString()));
9393

9494
var data = list.BuildList();
9595

@@ -98,27 +98,27 @@ public void GivenListOfBuildersWithCustomisation_WhenBuildingEntitiesExplicitly_
9898
}
9999

100100
[Fact]
101-
public void GivenListOfBuildersWithCustomisation_WhenBuildingEntitiesImplicitly_ThenTheCustomisationShouldTakeEffect()
101+
public void GivenListOfBuildersWithCustomisation_WhenBuildingObjectsImplicitly_ThenTheCustomisationShouldTakeEffect()
102102
{
103103
var generator = new SequentialGenerator(0, 100);
104104

105-
List<StudentViewModel> data = StudentViewModelBuilder.CreateListOfSize(3)
106-
.All().With(b => b.WithFirstName(generator.Generate().ToString()));
105+
List<StudentViewModel> data = Builder<StudentViewModel>.CreateListOfSize(3)
106+
.All().With(b => b.Set(x => x.FirstName, generator.Generate().ToString()));
107107

108108
data.Select(c => c.FirstName).ToArray()
109109
.ShouldBe(new[] { "0", "1", "2" });
110110
}
111111

112112
[Fact]
113-
public void GivenListOfBuildersWithARangeOfCustomisationMethods_WhenBuildingEntitiesExplicitly_ThenThenTheListIsBuiltAndModifiedCorrectly()
113+
public void GivenListOfBuildersWithComplexCustomisations_WhenBuildingObjectsExplicitly_ThenThenTheListIsBuiltAndModifiedCorrectly()
114114
{
115115
var i = 0;
116-
var studentViewModels = StudentViewModelBuilder.CreateListOfSize(5)
117-
.TheFirst(1).WithFirstName("First")
118-
.TheNext(1).WithLastName("Next Last")
119-
.TheLast(1).WithLastName("Last Last")
120-
.ThePrevious(2).With(b => b.WithLastName("last" + (++i).ToString()))
121-
.All().WhoEntrolledIn(_enrollmentDate)
116+
var studentViewModels = Builder<StudentViewModel>.CreateListOfSize(5)
117+
.TheFirst(1).Set(x => x.FirstName, "First")
118+
.TheNext(1).Set(x => x.LastName, "Next Last")
119+
.TheLast(1).Set(x => x.LastName, "Last Last")
120+
.ThePrevious(2).With(b => b.Set(x => x.LastName, "last" + (++i).ToString()))
121+
.All().Set(x => x.EnrollmentDate, _enrollmentDate)
122122
.BuildList();
123123

124124
studentViewModels.ShouldBeAssignableTo<IList<StudentViewModel>>();
@@ -132,15 +132,15 @@ public void GivenListOfBuildersWithARangeOfCustomisationMethods_WhenBuildingEnti
132132
}
133133

134134
[Fact]
135-
public void GivenListOfBuildersWithARangeOfCustomisationMethods_WhenBuildingEntitiesImplicitly_ThenThenTheListIsBuiltAndModifiedCorrectly()
135+
public void GivenListOfBuildersWithComplexCustomisations_WhenBuildingObjectsImplicitly_ThenThenTheListIsBuiltAndModifiedCorrectly()
136136
{
137137
var i = 0;
138-
List<StudentViewModel> studentViewModels = StudentViewModelBuilder.CreateListOfSize(5)
139-
.TheFirst(1).WithFirstName("First")
140-
.TheNext(1).WithLastName("Next Last")
141-
.TheLast(1).WithLastName("Last Last")
142-
.ThePrevious(2).With(b => b.WithLastName("last" + (++i).ToString()))
143-
.All().WhoEntrolledIn(_enrollmentDate);
138+
List<StudentViewModel> studentViewModels = Builder<StudentViewModel>.CreateListOfSize(5)
139+
.TheFirst(1).Set(x => x.FirstName, "First")
140+
.TheNext(1).Set(x => x.LastName, "Next Last")
141+
.TheLast(1).Set(x => x.LastName, "Last Last")
142+
.ThePrevious(2).With(b => b.Set(x => x.LastName, "last" + (++i).ToString()))
143+
.All().Set(x => x.EnrollmentDate, _enrollmentDate);
144144

145145
studentViewModels.ShouldBeAssignableTo<IList<StudentViewModel>>();
146146
studentViewModels.Count.ShouldBe(5);
@@ -153,17 +153,17 @@ public void GivenListOfBuildersWithARangeOfCustomisationMethods_WhenBuildingEnti
153153
}
154154

155155
[Fact]
156-
public void WhenBuildingEntitiesExplicitly_ThenTheAnonymousValueFixtureIsSharedAcrossBuilders()
156+
public void WhenBuildingObjectsExplicitly_ThenTheAnonymousValueFixtureIsSharedAcrossBuilders()
157157
{
158-
var studentViewModels = StudentViewModelBuilder.CreateListOfSize(5).BuildList();
158+
var studentViewModels = Builder<StudentViewModel>.CreateListOfSize(5).BuildList();
159159

160160
studentViewModels.Select(x => x.Grade).ShouldBeUnique();
161161
}
162162

163163
[Fact]
164-
public void WhenBuildingEntitiesImplicitly_ThenTheAnonymousValueFixtureIsSharedAcrossBuilders()
164+
public void WhenBuildingObjectsImplicitly_ThenTheAnonymousValueFixtureIsSharedAcrossBuilders()
165165
{
166-
List<StudentViewModel> studentViewModels = StudentViewModelBuilder.CreateListOfSize(5);
166+
List<StudentViewModel> studentViewModels = Builder<StudentViewModel>.CreateListOfSize(5);
167167

168168
studentViewModels.Select(x => x.Grade).ShouldBeUnique();
169169
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using System;
2+
using Shouldly;
3+
using TestStack.Dossier.Tests.Stubs.Entities;
4+
using TestStack.Dossier.Tests.Stubs.Examples;
5+
using TestStack.Dossier.Tests.Stubs.ViewModels;
6+
using Xunit;
7+
8+
namespace TestStack.Dossier.Tests
9+
{
10+
// ReSharper disable once InconsistentNaming
11+
public class Builder_CreateNewTests
12+
{
13+
[Fact]
14+
public void GivenBuilder_WhenCallingBuildExplicitly_ThenReturnAnObject()
15+
{
16+
var builder = Builder<StudentViewModel>.CreateNew();
17+
18+
var viewModel = builder.Build();
19+
20+
viewModel.ShouldBeOfType<StudentViewModel>();
21+
}
22+
23+
[Fact]
24+
public void GivenBuilder_WhenCallingBuildImplicitly_ThenReturnAnObject()
25+
{
26+
StudentViewModel viewModel = Builder<StudentViewModel>.CreateNew();
27+
28+
viewModel.ShouldBeOfType<StudentViewModel>();
29+
}
30+
31+
[Fact]
32+
public void GivenBuilderWithModifications_WhenCallingBuildExplicitly_ShouldOverrideValues()
33+
{
34+
var builder = Builder<StudentViewModel>.CreateNew()
35+
.Set(x => x.FirstName, "Pi")
36+
.Set(x => x.LastName, "Lanningham")
37+
.Set(x => x.EnrollmentDate, new DateTime(2000, 1, 1));
38+
39+
var customer = builder.Build();
40+
41+
customer.FirstName.ShouldBe("Pi");
42+
customer.LastName.ShouldBe("Lanningham");
43+
customer.EnrollmentDate.ShouldBe(new DateTime(2000, 1, 1));
44+
}
45+
46+
[Fact]
47+
public void GivenBuilderWithModifications_WhenCallingBuildImplicitly_ShouldOverrideValues()
48+
{
49+
StudentViewModel customer = Builder<StudentViewModel>.CreateNew()
50+
.Set(x => x.FirstName, "Pi")
51+
.Set(x => x.LastName, "Lanningham")
52+
.Set(x => x.EnrollmentDate, new DateTime(2000, 1, 1));
53+
54+
customer.FirstName.ShouldBe("Pi");
55+
customer.LastName.ShouldBe("Lanningham");
56+
customer.EnrollmentDate.ShouldBe(new DateTime(2000, 1, 1));
57+
}
58+
59+
[Fact]
60+
public void GivenBuilder_WhenBuildingObjectWithCtorAndPrivateSetters_ShouldSetPrivateSettersByDefault()
61+
{
62+
MixedAccessibilityDto dto = Builder<MixedAccessibilityDto>.CreateNew()
63+
.Set(x => x.SetByCtorWithPublicSetter, "1")
64+
.Set(x => x.SetByCtorWithPrivateSetter, "2")
65+
.Set(x => x.NotSetByCtorWithPrivateSetter, "3")
66+
.Set(x => x.NotSetByCtorWithPublicSetter, "4");
67+
68+
dto.SetByCtorWithPublicSetter.ShouldBe("1");
69+
dto.SetByCtorWithPrivateSetter.ShouldBe("2");
70+
dto.NotSetByCtorWithPrivateSetter.ShouldBe("3");
71+
dto.NotSetByCtorWithPublicSetter.ShouldBe("4");
72+
}
73+
}
74+
}

TestStack.Dossier.Tests/Builders/BasicCustomerBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ protected override Customer BuildObject()
1111
return new Customer("customer1", "First Name", "Last Name", 2013, CustomerClass.Normal);
1212
}
1313

14-
public new BasicCustomerBuilder Set<TValue>(Expression<Func<Customer, TValue>> property, TValue value)
14+
public virtual new BasicCustomerBuilder Set<TValue>(Expression<Func<Customer, TValue>> property, TValue value)
1515
{
1616
return base.Set(property, value);
1717
}

TestStack.Dossier.Tests/Builders/StudentViewModelBuilder.cs

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)