Skip to content

Commit 1e03574

Browse files
authored
Merge pull request #39 from twsouthwick/builder
Update to Autofac 5.2.0 and react to immutability changes
2 parents a00e862 + 49f0d2c commit 1e03574

15 files changed

+391
-219
lines changed

AutofacContrib.NSubstitute.Tests/AutoSubstituteCollectionFixture.cs

+46-45
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.Linq;
33
using System.Security.Cryptography.X509Certificates;
4+
using Autofac;
45
using NSubstitute;
56
using NUnit.Framework;
67

@@ -78,76 +79,76 @@ public TestIReadOnlyListComponent(IReadOnlyList<IServiceItem> serviceItems)
7879
[Test]
7980
public void TestIEnumerableCorrectlyResolves()
8081
{
81-
using(var autosub = new AutoSubstitute())
82-
{
83-
var mockA = autosub.Provide<IServiceItem, ServiceItemA>();
84-
var mockB = autosub.Provide<IServiceItem, ServiceItemB>();
85-
var component = autosub.Resolve<TestIEnumerableComponent>();
82+
using var autosub = AutoSubstitute.Configure()
83+
.Provide<IServiceItem, ServiceItemA>(out var mockA)
84+
.Provide<IServiceItem, ServiceItemB>(out var mockB)
85+
.Build();
8686

87-
Assert.That(component.ServiceItems, Is.Not.Empty);
88-
Assert.That(component.ServiceItems.Contains(mockA), Is.True);
89-
Assert.That(component.ServiceItems.Contains(mockB), Is.True);
90-
}
87+
var component = autosub.Resolve<TestIEnumerableComponent>();
88+
89+
Assert.That(component.ServiceItems, Is.Not.Empty);
90+
Assert.That(component.ServiceItems.Contains(mockA.Value), Is.True);
91+
Assert.That(component.ServiceItems.Contains(mockB.Value), Is.True);
9192
}
9293

9394
[Test]
9495
public void TestIListCorrectlyResolves()
9596
{
96-
using(var autosub = new AutoSubstitute())
97-
{
98-
var mockA = autosub.Provide<IServiceItem, ServiceItemA>();
99-
var mockB = autosub.Provide<IServiceItem, ServiceItemB>();
100-
var component = autosub.Resolve<TestIListComponent>();
97+
using var autosub = AutoSubstitute.Configure()
98+
.Provide<IServiceItem, ServiceItemA>(out var mockA)
99+
.Provide<IServiceItem, ServiceItemB>(out var mockB)
100+
.Build();
101101

102-
Assert.That(component.ServiceItems, Is.Not.Empty);
103-
Assert.That(component.ServiceItems.Contains(mockA), Is.True);
104-
Assert.That(component.ServiceItems.Contains(mockB), Is.True);
105-
}
102+
var component = autosub.Resolve<TestIListComponent>();
103+
104+
Assert.That(component.ServiceItems, Is.Not.Empty);
105+
Assert.That(component.ServiceItems.Contains(mockA.Value), Is.True);
106+
Assert.That(component.ServiceItems.Contains(mockB.Value), Is.True);
106107
}
107108

108109
[Test]
109110
public void TestIReadOnlyCollectionCorrectlyResolves()
110111
{
111-
using(var autosub = new AutoSubstitute())
112-
{
113-
var mockA = autosub.Provide<IServiceItem, ServiceItemA>();
114-
var mockB = autosub.Provide<IServiceItem, ServiceItemB>();
115-
var component = autosub.Resolve<TestIReadOnlyCollectionComponent>();
112+
using var autosub = AutoSubstitute.Configure()
113+
.Provide<IServiceItem, ServiceItemA>(out var mockA)
114+
.Provide<IServiceItem, ServiceItemB>(out var mockB)
115+
.Build();
116116

117-
Assert.That(component.ServiceItems, Is.Not.Empty);
118-
Assert.That(component.ServiceItems.Contains(mockA), Is.True);
119-
Assert.That(component.ServiceItems.Contains(mockB), Is.True);
120-
}
117+
var component = autosub.Resolve<TestIReadOnlyCollectionComponent>();
118+
119+
Assert.That(component.ServiceItems, Is.Not.Empty);
120+
Assert.That(component.ServiceItems.Contains(mockA.Value), Is.True);
121+
Assert.That(component.ServiceItems.Contains(mockB.Value), Is.True);
121122
}
122123

123124
[Test]
124125
public void TestICollectionCorrectlyResolves()
125126
{
126-
using(var autosub = new AutoSubstitute())
127-
{
128-
var mockA = autosub.Provide<IServiceItem, ServiceItemA>();
129-
var mockB = autosub.Provide<IServiceItem, ServiceItemB>();
130-
var component = autosub.Resolve<TestICollectionComponent>();
127+
using var autosub = AutoSubstitute.Configure()
128+
.Provide<IServiceItem, ServiceItemA>(out var mockA)
129+
.Provide<IServiceItem, ServiceItemB>(out var mockB)
130+
.Build();
131131

132-
Assert.That(component.ServiceItems, Is.Not.Empty);
133-
Assert.That(component.ServiceItems.Contains(mockA), Is.True);
134-
Assert.That(component.ServiceItems.Contains(mockB), Is.True);
135-
}
132+
var component = autosub.Resolve<TestICollectionComponent>();
133+
134+
Assert.That(component.ServiceItems, Is.Not.Empty);
135+
Assert.That(component.ServiceItems.Contains(mockA.Value), Is.True);
136+
Assert.That(component.ServiceItems.Contains(mockB.Value), Is.True);
136137
}
137138

138139
[Test]
139140
public void TestIReadOnlyListCorrectlyResolves()
140141
{
141-
using(var autosub = new AutoSubstitute())
142-
{
143-
var mockA = autosub.Provide<IServiceItem, ServiceItemA>();
144-
var mockB = autosub.Provide<IServiceItem, ServiceItemB>();
145-
var component = autosub.Resolve<TestIReadOnlyListComponent>();
142+
using var autosub = AutoSubstitute.Configure()
143+
.Provide<IServiceItem, ServiceItemA>(out var mockA)
144+
.Provide<IServiceItem, ServiceItemB>(out var mockB)
145+
.Build();
146146

147-
Assert.That(component.ServiceItems, Is.Not.Empty);
148-
Assert.That(component.ServiceItems.Contains(mockA), Is.True);
149-
Assert.That(component.ServiceItems.Contains(mockB), Is.True);
150-
}
147+
var component = autosub.Resolve<TestIReadOnlyListComponent>();
148+
149+
Assert.That(component.ServiceItems, Is.Not.Empty);
150+
Assert.That(component.ServiceItems.Contains(mockA.Value), Is.True);
151+
Assert.That(component.ServiceItems.Contains(mockB.Value), Is.True);
151152
}
152153
}
153154
}

AutofacContrib.NSubstitute.Tests/AutoSubstituteFixture.cs

+27-31
Original file line numberDiff line numberDiff line change
@@ -49,70 +49,66 @@ public void RunAll()
4949
[Test]
5050
public void DefaultConstructorIsLoose()
5151
{
52-
using (var mock = new AutoSubstitute())
53-
{
54-
RunWithSingleSetupationTest(mock);
55-
}
52+
using var mock = new AutoSubstitute();
53+
54+
RunWithSingleSetupationTest(mock);
5655
}
5756

5857
[Test]
5958
public void ProvideMock()
6059
{
61-
using (var autoSubstitute = new AutoSubstitute())
62-
{
63-
var mockA = Substitute.For<IServiceA>();
64-
autoSubstitute.Provide(mockA);
60+
var mockA = Substitute.For<IServiceA>();
6561

66-
var component = autoSubstitute.Resolve<TestComponent>();
67-
component.RunAll();
62+
using var autoSubstitute = AutoSubstitute.Configure()
63+
.Provide(mockA)
64+
.Build();
6865

69-
mockA.Received().RunA();
70-
}
66+
var component = autoSubstitute.Resolve<TestComponent>();
67+
component.RunAll();
68+
69+
mockA.Received().RunA();
7170
}
7271

7372
[Test]
7473
public void ProvideImplementation()
7574
{
76-
using (var mock = new AutoSubstitute())
77-
{
78-
var serviceA = mock.Provide<IServiceA, ServiceA>();
75+
using var mock = AutoSubstitute.Configure()
76+
.Provide<IServiceA, ServiceA>(out var serviceA)
77+
.Build();
7978

80-
Assert.IsNotNull(serviceA);
81-
Assert.IsFalse(serviceA is ICallRouter);
82-
}
79+
Assert.IsNotNull(serviceA.Value);
80+
Assert.IsFalse(serviceA.Value is ICallRouter);
8381
}
8482

8583
[Test]
8684
public void DefaultConstructorWorksWithAllTests()
8785
{
88-
using (var mock = new AutoSubstitute())
89-
{
90-
RunTest(mock);
91-
}
86+
using var mock = new AutoSubstitute();
87+
88+
RunTest(mock);
9289
}
9390

9491
[Test]
9592
public void WorksWithUnmetSetupations()
9693
{
97-
using (var loose = new AutoSubstitute())
98-
{
99-
RunWithSingleSetupationTest(loose);
100-
}
94+
using var loose = new AutoSubstitute();
95+
96+
RunWithSingleSetupationTest(loose);
10197
}
10298

10399
[Test]
104100
public void NormalSetupationsAreVerified()
105101
{
106-
using (var mock = new AutoSubstitute())
107-
{
108-
Assert.That(() => SetUpSetupations(mock), Throws.TypeOf<ReceivedCallsException>());
109-
}
102+
using var mock = new AutoSubstitute();
103+
104+
Assert.That(() => SetUpSetupations(mock), Throws.TypeOf<ReceivedCallsException>());
110105
}
111106

112107
[Test]
113108
public void ProperInitializationIsPerformed()
114109
{
115-
var autoSubstitute = new AutoSubstitute();
110+
using var autoSubstitute = new AutoSubstitute();
111+
116112
Assert.IsNotNull(autoSubstitute.Container);
117113
}
118114

AutofacContrib.NSubstitute.Tests/AutofacContrib.NSubstitute.Tests.csproj

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp2.2</TargetFramework>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
55

66
<IsPackable>false</IsPackable>
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Autofac" Version="4.9.4" />
11-
<PackageReference Include="NSubstitute" Version="4.2.1" />
10+
<PackageReference Include="Autofac" Version="5.2.0" />
11+
<PackageReference Include="NSubstitute" Version="4.2.2" />
1212
<PackageReference Include="nunit" Version="3.12.0" />
13-
<PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
14-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
13+
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
14+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.0" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

AutofacContrib.NSubstitute.Tests/ExampleFixture.cs

+32-22
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public ConcreteClassWithDependency(IDependency1 dependency, int i)
6969

7070
public int Double()
7171
{
72-
return _dependency.SomeMethod(_i)*2;
72+
return _dependency.SomeMethod(_i) * 2;
7373
}
7474
}
7575

@@ -127,12 +127,15 @@ public void Example_test_with_standard_resolve()
127127
public void Example_test_with_concrete_type_provided()
128128
{
129129
const int val = 3;
130-
var AutoSubstitute = new AutoSubstitute();
131-
AutoSubstitute.Resolve<IDependency2>().SomeOtherMethod().Returns(val); // This shouldn't do anything because of the next line
132-
AutoSubstitute.Provide<IDependency2, Dependency2>();
133-
AutoSubstitute.Resolve<IDependency1>().SomeMethod(Arg.Any<int>()).Returns(c => c.Arg<int>());
134130

135-
var result = AutoSubstitute.Resolve<MyClass>().AMethod();
131+
using var mock = AutoSubstitute.Configure()
132+
.Provide<IDependency2, Dependency2>(out _)
133+
.Build();
134+
135+
mock.Resolve<IDependency2>().SomeOtherMethod().Returns(val); // This shouldn't do anything because of the next line
136+
mock.Resolve<IDependency1>().SomeMethod(Arg.Any<int>()).Returns(c => c.Arg<int>());
137+
138+
var result = mock.Resolve<MyClass>().AMethod();
136139

137140
Assert.That(result, Is.EqualTo(Dependency2.Value));
138141
}
@@ -142,11 +145,14 @@ public void Example_test_with_concrete_object_provided()
142145
{
143146
const int val1 = 3;
144147
const int val2 = 2;
145-
var AutoSubstitute = new AutoSubstitute();
146-
AutoSubstitute.Resolve<IDependency2>().SomeOtherMethod().Returns(val1);
147-
AutoSubstitute.Provide(new ConcreteClass(val2));
148148

149-
var result = AutoSubstitute.Resolve<MyClassWithConcreteDependency>().AMethod();
149+
var mock = AutoSubstitute.Configure()
150+
.Provide(new ConcreteClass(val2))
151+
.Build();
152+
153+
mock.Resolve<IDependency2>().SomeOtherMethod().Returns(val1);
154+
155+
var result = mock.Resolve<MyClassWithConcreteDependency>().AMethod();
150156

151157
Assert.That(result, Is.EqualTo(val1 + val2));
152158
}
@@ -157,11 +163,14 @@ public void Example_test_with_substitute_for_concrete()
157163
const int val1 = 3;
158164
const int val2 = 2;
159165
const int val3 = 10;
160-
var AutoSubstitute = new AutoSubstitute();
161-
AutoSubstitute.Resolve<IDependency2>().SomeOtherMethod().Returns(val1);
162-
AutoSubstitute.SubstituteFor<ConcreteClass>(val2).Add(Arg.Any<int>()).Returns(val3);
163166

164-
var result = AutoSubstitute.Resolve<MyClassWithConcreteDependency>().AMethod();
167+
using var utoSubstitute = AutoSubstitute.Configure()
168+
.SubstituteFor<ConcreteClass>(val2).Configure(c => c.Add(Arg.Any<int>()).Returns(val3))
169+
.Build();
170+
171+
utoSubstitute.Resolve<IDependency2>().SomeOtherMethod().Returns(val1);
172+
173+
var result = utoSubstitute.Resolve<MyClassWithConcreteDependency>().AMethod();
165174

166175
Assert.That(result, Is.EqualTo(val3));
167176
}
@@ -172,16 +181,17 @@ public void Example_test_with_substitute_for_concrete_resolved_from_autofac()
172181
const int val1 = 2;
173182
const int val2 = 3;
174183
const int val3 = 4;
175-
var AutoSubstitute = new AutoSubstitute();
176-
// Much better / more maintainable than:
177-
//AutoSubstitute.SubstituteFor<ConcreteClassWithDependency>(AutoSubstitute.Resolve<IDependency1>(), val1);
178-
AutoSubstitute.ResolveAndSubstituteFor<ConcreteClassWithDependency>(new TypedParameter(typeof(int), val1));
179-
AutoSubstitute.Resolve<IDependency2>().SomeOtherMethod().Returns(val2);
180-
AutoSubstitute.Resolve<IDependency1>().SomeMethod(val1).Returns(val3);
181184

182-
var result = AutoSubstitute.Resolve<MyClassWithConcreteDependencyThatHasDependencies>().AMethod();
185+
using var mock = AutoSubstitute.Configure()
186+
.ResolveAndSubstituteFor<ConcreteClassWithDependency>(new TypedParameter(typeof(int), val1))
187+
.Build();
188+
189+
mock.Resolve<IDependency2>().SomeOtherMethod().Returns(val2);
190+
mock.Resolve<IDependency1>().SomeMethod(val1).Returns(val3);
191+
192+
var result = mock.Resolve<MyClassWithConcreteDependencyThatHasDependencies>().AMethod();
183193

184-
Assert.That(result, Is.EqualTo(val2*val3*2));
194+
Assert.That(result, Is.EqualTo(val2 * val3 * 2));
185195
}
186196
}
187197
}

AutofacContrib.NSubstitute.Tests/KeyedRegistrationFixture.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,14 @@ public static void ShouldResolveASubstituteForIndexedDependency()
5050
[Test]
5151
public static void ShouldAcceptProvidedIndexedDependency()
5252
{
53-
var autoSubstitute = new AutoSubstitute();
5453
var substitute = Substitute.For<IDependency2>();
54+
55+
using var autoSubstitute = AutoSubstitute.Configure()
56+
.Provide(substitute, Switch.On)
57+
.Build();
58+
5559
substitute.SomeOtherMethod().Returns(5);
56-
autoSubstitute.Provide(substitute, Switch.On);
57-
60+
5861
var target = autoSubstitute.Resolve<ClassWithKeyedDependencies>();
5962

6063
Assert.That(target.OnDependency.SomeOtherMethod(), Is.EqualTo(5));

AutofacContrib.NSubstitute.sln

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ VisualStudioVersion = 16.0.29409.12
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutofacContrib.NSubstitute", "AutofacContrib.NSubstitute\AutofacContrib.NSubstitute.csproj", "{7E69ECB4-84A5-41F0-8497-D94A3A45757F}"
77
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutofacContrib.NSubstitute.Tests", "AutofacContrib.NSubstitute.Tests\AutofacContrib.NSubstitute.Tests.csproj", "{56FF83E0-BCB9-4391-9BCC-912347C84398}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutofacContrib.NSubstitute.Tests", "AutofacContrib.NSubstitute.Tests\AutofacContrib.NSubstitute.Tests.csproj", "{56FF83E0-BCB9-4391-9BCC-912347C84398}"
99
EndProject
1010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A5ECD18F-1D42-444E-BB3A-6062D8B0E256}"
1111
ProjectSection(SolutionItems) = preProject
1212
BREAKING_CHANGES.md = BREAKING_CHANGES.md
13+
global.json = global.json
1314
LICENSE = LICENSE
1415
logo.png = logo.png
1516
README.md = README.md

0 commit comments

Comments
 (0)