Skip to content

Commit 697b9f0

Browse files
committed
Replace Moq with NSubstitute - Parameters example
1 parent 5dcbf5f commit 697b9f0

File tree

4 files changed

+81
-101
lines changed

4 files changed

+81
-101
lines changed

examples/Parameters/src/HelloWorld/HelloWorld.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77
<ItemGroup>
88
<PackageReference Include="Amazon.Lambda.Core" Version="2.1.0" />
9-
<PackageReference Include="Amazon.Lambda.APIGatewayEvents" Version="2.5.0" />
9+
<PackageReference Include="Amazon.Lambda.APIGatewayEvents" Version="2.6.0" />
1010
<PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.0" />
1111
<PackageReference Include="AWS.Lambda.Powertools.Parameters" Version="0.0.2-preview" />
1212
</ItemGroup>

examples/Parameters/test/HelloWorld.Test/FunctionTest.cs

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
using Amazon.Lambda.APIGatewayEvents;
2020
using Amazon.Lambda.TestUtilities;
2121
using Xunit;
22-
using Moq;
22+
using NSubstitute;
2323
using System.Text.Json;
2424

2525
namespace HelloWorld.Tests
@@ -32,7 +32,7 @@ public async Task TestHelloWorldFunctionHandler()
3232
// Arrange
3333
var requestId = Guid.NewGuid().ToString("D");
3434
var accountId = Guid.NewGuid().ToString("D");
35-
35+
3636
var request = new APIGatewayProxyRequest
3737
{
3838
RequestContext = new APIGatewayProxyRequest.ProxyRequestContext
@@ -41,28 +41,26 @@ public async Task TestHelloWorldFunctionHandler()
4141
AccountId = accountId
4242
}
4343
};
44-
44+
4545
var context = new TestLambdaContext()
4646
{
4747
FunctionName = Guid.NewGuid().ToString("D"),
4848
FunctionVersion = "1",
4949
MemoryLimitInMB = 215,
5050
AwsRequestId = requestId
5151
};
52-
53-
var helper = new Mock<IParameterLookupHelper>();
54-
52+
53+
var helper = Substitute.For<IParameterLookupHelper>();
54+
5555
var singleSsmRecord = new ParameterLookupRecord
5656
{
5757
Provider = ParameterProviderType.SsmProvider,
5858
Method = ParameterLookupMethod.Get,
5959
Key = Guid.NewGuid().ToString("D"),
6060
Value = Guid.NewGuid().ToString("D")
6161
};
62-
helper.Setup(c =>
63-
c.GetSingleParameterWithSsmProvider()
64-
).ReturnsAsync(singleSsmRecord);
65-
62+
helper.GetSingleParameterWithSsmProvider().Returns(singleSsmRecord);
63+
6664
var multipleSsmRecord = new ParameterLookupRecord
6765
{
6866
Provider = ParameterProviderType.SsmProvider,
@@ -74,9 +72,7 @@ public async Task TestHelloWorldFunctionHandler()
7472
{ Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D") }
7573
}
7674
};
77-
helper.Setup(c =>
78-
c.GetMultipleParametersWithSsmProvider()
79-
).ReturnsAsync(multipleSsmRecord);
75+
helper.GetMultipleParametersWithSsmProvider().Returns(multipleSsmRecord);
8076

8177
var singleSecretRecord = new ParameterLookupRecord
8278
{
@@ -89,21 +85,17 @@ public async Task TestHelloWorldFunctionHandler()
8985
Password = Guid.NewGuid().ToString("D")
9086
}
9187
};
92-
helper.Setup(c =>
93-
c.GetSingleSecretWithSecretsProvider()
94-
).ReturnsAsync(singleSecretRecord);
95-
88+
helper.GetSingleSecretWithSecretsProvider().Returns(singleSecretRecord);
89+
9690
var singleDynamoDbRecord = new ParameterLookupRecord
9791
{
9892
Provider = ParameterProviderType.DynamoDBProvider,
9993
Method = ParameterLookupMethod.Get,
10094
Key = Guid.NewGuid().ToString("D"),
10195
Value = Guid.NewGuid().ToString("D")
10296
};
103-
helper.Setup(c =>
104-
c.GetSingleParameterWithDynamoDBProvider()
105-
).ReturnsAsync(singleDynamoDbRecord);
106-
97+
helper.GetSingleParameterWithDynamoDBProvider().Returns(singleDynamoDbRecord);
98+
10799
var multipleDynamoDbRecord = new ParameterLookupRecord
108100
{
109101
Provider = ParameterProviderType.DynamoDBProvider,
@@ -115,10 +107,8 @@ public async Task TestHelloWorldFunctionHandler()
115107
{ Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D") }
116108
}
117109
};
118-
helper.Setup(c =>
119-
c.GetMultipleParametersWithDynamoDBProvider()
120-
).ReturnsAsync(multipleDynamoDbRecord);
121-
110+
helper.GetMultipleParametersWithDynamoDBProvider().Returns(multipleDynamoDbRecord);
111+
122112
var body = new Dictionary<string, object>
123113
{
124114
{ "RequestId", requestId },
@@ -134,7 +124,7 @@ public async Task TestHelloWorldFunctionHandler()
134124
}
135125
}
136126
};
137-
127+
138128
var expectedResponse = new APIGatewayProxyResponse
139129
{
140130
Body = JsonSerializer.Serialize(body),
@@ -143,15 +133,15 @@ public async Task TestHelloWorldFunctionHandler()
143133
};
144134

145135
// Act
146-
var function = new Function(helper.Object);
136+
var function = new Function(helper);
147137
var response = await function.FunctionHandler(request, context).ConfigureAwait(false);
148138

149139
// Assert
150-
helper.Verify(v => v.GetSingleParameterWithSsmProvider(), Times.Once);
151-
helper.Verify(v => v.GetMultipleParametersWithSsmProvider(), Times.Once);
152-
helper.Verify(v => v.GetSingleSecretWithSecretsProvider(), Times.Once);
153-
helper.Verify(v => v.GetSingleParameterWithDynamoDBProvider(), Times.Once);
154-
helper.Verify(v => v.GetMultipleParametersWithDynamoDBProvider(), Times.Once);
140+
await helper.Received(1).GetSingleParameterWithSsmProvider();
141+
await helper.Received(1).GetMultipleParametersWithSsmProvider();
142+
await helper.Received(1).GetSingleSecretWithSecretsProvider();
143+
await helper.Received(1).GetSingleParameterWithDynamoDBProvider();
144+
await helper.Received(1).GetMultipleParametersWithDynamoDBProvider();
155145
Assert.Equal(expectedResponse.Body, response.Body);
156146
Assert.Equal(expectedResponse.Headers, response.Headers);
157147
Assert.Equal(expectedResponse.StatusCode, response.StatusCode);

examples/Parameters/test/HelloWorld.Test/HelloWorld.Tests.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
<PackageReference Include="Amazon.Lambda.Core" Version="2.1.0" />
77
<PackageReference Include="Amazon.Lambda.TestUtilities" Version="2.0.0" />
88
<PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />
9-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.0-preview.23280.1" />
10-
<PackageReference Include="Moq" Version="4.18.4" />
11-
<PackageReference Include="xunit" Version="2.4.2" />
12-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
9+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.0" />
10+
<PackageReference Include="NSubstitute" Version="5.0.0" />
11+
<PackageReference Include="xunit" Version="2.5.0" />
12+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.0">
1313
<PrivateAssets>all</PrivateAssets>
1414
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1515
</PackageReference>

examples/Parameters/test/HelloWorld.Test/ParameterLookupTest.cs

Lines changed: 54 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
using Xunit;
2525
using AWS.Lambda.Powertools.Parameters.SimpleSystemsManagement;
2626
using AWS.Lambda.Powertools.Parameters.Transform;
27-
using Moq;
27+
using NSubstitute;
2828

2929
namespace HelloWorld.Tests
3030
{
@@ -40,7 +40,7 @@ public MockParameterProviderConfigurationBuilder(ParameterProvider parameterProv
4040
private readonly IParameterProvider _parameterProvider;
4141

4242
public MockParameterProviderConfigurationBuilder(IParameterProvider parameterProvider) : base(
43-
(new Mock<ParameterProvider>()).Object)
43+
Substitute.For<ParameterProvider>())
4444
{
4545
_parameterProvider = parameterProvider;
4646
}
@@ -67,26 +67,25 @@ public async Task TestGetSingleParameterWithSsmProvider()
6767
var parameterName = Guid.NewGuid().ToString("D");
6868
var parameterValue = Guid.NewGuid().ToString("D");
6969

70-
Environment.SetEnvironmentVariable(EnvironmentVariableNames.SsmSingleParameterNameVariableName, parameterName);
70+
Environment.SetEnvironmentVariable(EnvironmentVariableNames.SsmSingleParameterNameVariableName,
71+
parameterName);
7172

72-
var provider = new Mock<ISsmProvider>();
73-
provider.Setup(c =>
74-
c.GetAsync(parameterName)
75-
).ReturnsAsync(parameterValue);
73+
var provider = Substitute.For<ISsmProvider>();
74+
provider.GetAsync(parameterName).Returns(parameterValue);
7675

7776
// Act
78-
var helper = new ParameterLookupHelper(provider.Object, parameterProviderType);
77+
var helper = new ParameterLookupHelper(provider, parameterProviderType);
7978
var result = await helper.GetSingleParameterWithSsmProvider().ConfigureAwait(false);
80-
79+
8180
// Assert
82-
provider.Verify(v => v.GetAsync(parameterName), Times.Once);
81+
await provider.Received(1).GetAsync(parameterName);
8382
Assert.NotNull(result);
8483
Assert.Equal(parameterProviderType, result.Provider);
8584
Assert.Equal(parameterLookupMethod, result.Method);
8685
Assert.Equal(parameterName, result.Key);
8786
Assert.Equal(parameterValue, result.Value);
8887
}
89-
88+
9089
[Fact]
9190
public async Task TestGetMultipleParametersWithSsmProvider()
9291
{
@@ -100,24 +99,23 @@ public async Task TestGetMultipleParametersWithSsmProvider()
10099
{ Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D") }
101100
};
102101

103-
Environment.SetEnvironmentVariable(EnvironmentVariableNames.SsmMultipleParametersPathPrefixVariableName, parameterPathPrefix);
102+
Environment.SetEnvironmentVariable(EnvironmentVariableNames.SsmMultipleParametersPathPrefixVariableName,
103+
parameterPathPrefix);
104104

105-
var provider = new Mock<ISsmProvider>();
106-
provider.Setup(c =>
107-
c.GetMultipleAsync(parameterPathPrefix)
108-
).ReturnsAsync(parameterValues);
105+
var provider = Substitute.For<ISsmProvider>();
106+
provider.GetMultipleAsync(parameterPathPrefix).Returns(parameterValues);
109107

110108
// Act
111-
var helper = new ParameterLookupHelper(provider.Object, parameterProviderType);
109+
var helper = new ParameterLookupHelper(provider, parameterProviderType);
112110
var result = await helper.GetMultipleParametersWithSsmProvider().ConfigureAwait(false);
113-
111+
114112
// Assert
115-
provider.Verify(v => v.GetMultipleAsync(parameterPathPrefix), Times.Once);
113+
await provider.Received(1).GetMultipleAsync(parameterPathPrefix);
116114
Assert.NotNull(result);
117115
Assert.Equal(parameterProviderType, result.Provider);
118116
Assert.Equal(parameterLookupMethod, result.Method);
119117
Assert.Equal(parameterPathPrefix, result.Key);
120-
118+
121119
var values = result.Value as IDictionary<string, string>;
122120
Assert.NotNull(values);
123121
Assert.Equal(parameterValues.Count, values.Count);
@@ -126,7 +124,7 @@ public async Task TestGetMultipleParametersWithSsmProvider()
126124
Assert.Equal(parameterValues.Last().Key, values.Last().Key);
127125
Assert.Equal(parameterValues.Last().Value, values.Last().Value);
128126
}
129-
127+
130128
[Fact]
131129
public async Task TestGetSingleSecretWithSecretsProvider()
132130
{
@@ -142,33 +140,30 @@ public async Task TestGetSingleSecretWithSecretsProvider()
142140

143141
Environment.SetEnvironmentVariable(EnvironmentVariableNames.SecretsManagerSecretName, secretName);
144142

145-
var provider = new Mock<ISecretsProvider>();
146-
provider.Setup(c =>
147-
c.GetAsync<SecretRecord>(secretName)
148-
).ReturnsAsync(secretValue);
149-
provider.Setup(c =>
150-
c.WithTransformation(Transformation.Json)
151-
).Returns(new MockParameterProviderConfigurationBuilder(provider.Object));
143+
var provider = Substitute.For<ISecretsProvider>();
144+
var configBuilder = new MockParameterProviderConfigurationBuilder(provider);
145+
provider.GetAsync<SecretRecord>(secretName).Returns(secretValue);
146+
provider.WithTransformation(Transformation.Json).Returns(configBuilder);
152147

153148
// Act
154-
var helper = new ParameterLookupHelper(provider.Object, parameterProviderType);
149+
var helper = new ParameterLookupHelper(provider, parameterProviderType);
155150
var result = await helper.GetSingleSecretWithSecretsProvider().ConfigureAwait(false);
156-
151+
157152
// Assert
158-
provider.Verify(v => v.GetAsync<SecretRecord>(secretName), Times.Once);
159-
provider.Verify(v => v.WithTransformation(Transformation.Json), Times.Once);
153+
await provider.Received(1).GetAsync<SecretRecord>(secretName);
154+
provider.Received(1).WithTransformation(Transformation.Json);
160155
Assert.NotNull(result);
161156
Assert.Equal(parameterProviderType, result.Provider);
162157
Assert.Equal(parameterLookupMethod, result.Method);
163158
Assert.Equal(secretName, result.Key);
164159
Assert.Equal(secretName, result.Key);
165-
160+
166161
var value = result.Value as SecretRecord;
167162
Assert.NotNull(value);
168163
Assert.Equal(secretValue.Username, value.Username);
169164
Assert.Equal(secretValue.Password, value.Password);
170165
}
171-
166+
172167
[Fact]
173168
public async Task TestGetSingleParameterWithDynamoDBProvider()
174169
{
@@ -179,31 +174,28 @@ public async Task TestGetSingleParameterWithDynamoDBProvider()
179174
var dynamoDbHashKey = Guid.NewGuid().ToString("D");
180175
var parameterValue = Guid.NewGuid().ToString("D");
181176

182-
Environment.SetEnvironmentVariable(EnvironmentVariableNames.DynamoDBSingleParameterTableName, dynamoDbTableName);
177+
Environment.SetEnvironmentVariable(EnvironmentVariableNames.DynamoDBSingleParameterTableName,
178+
dynamoDbTableName);
183179
Environment.SetEnvironmentVariable(EnvironmentVariableNames.DynamoDBSingleParameterId, dynamoDbHashKey);
184180

185-
var provider = new Mock<IDynamoDBProvider>();
186-
provider.Setup(c =>
187-
c.GetAsync(dynamoDbHashKey)
188-
).ReturnsAsync(parameterValue);
189-
provider.Setup(c =>
190-
c.UseTable(dynamoDbTableName)
191-
).Returns(provider.Object);
192-
181+
var provider = Substitute.For<IDynamoDBProvider>();
182+
provider.GetAsync(dynamoDbHashKey).Returns(parameterValue);
183+
provider.UseTable(dynamoDbTableName).Returns(provider);
184+
193185
// Act
194-
var helper = new ParameterLookupHelper(provider.Object, parameterProviderType);
186+
var helper = new ParameterLookupHelper(provider, parameterProviderType);
195187
var result = await helper.GetSingleParameterWithDynamoDBProvider().ConfigureAwait(false);
196-
188+
197189
// Assert
198-
provider.Verify(v => v.GetAsync(dynamoDbHashKey), Times.Once);
199-
provider.Verify(v => v.UseTable(dynamoDbTableName), Times.Once);
190+
await provider.Received(1).GetAsync(dynamoDbHashKey);
191+
provider.Received(1).UseTable(dynamoDbTableName);
200192
Assert.NotNull(result);
201193
Assert.Equal(parameterProviderType, result.Provider);
202194
Assert.Equal(parameterLookupMethod, result.Method);
203195
Assert.Equal(dynamoDbHashKey, result.Key);
204196
Assert.Equal(parameterValue, result.Value);
205197
}
206-
198+
207199
[Fact]
208200
public async Task TestGetMultipleParametersWithDynamoDBProvider()
209201
{
@@ -218,29 +210,27 @@ public async Task TestGetMultipleParametersWithDynamoDBProvider()
218210
{ Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D") }
219211
};
220212

221-
Environment.SetEnvironmentVariable(EnvironmentVariableNames.DynamoDBMultipleParametersTableName, dynamoDbTableName);
222-
Environment.SetEnvironmentVariable(EnvironmentVariableNames.DynamoDBMultipleParametersParameterId, dynamoDbHashKey);
223-
224-
var provider = new Mock<IDynamoDBProvider>();
225-
provider.Setup(c =>
226-
c.GetMultipleAsync(dynamoDbHashKey)
227-
).ReturnsAsync(parameterValues);
228-
provider.Setup(c =>
229-
c.UseTable(dynamoDbTableName)
230-
).Returns(provider.Object);
231-
213+
Environment.SetEnvironmentVariable(EnvironmentVariableNames.DynamoDBMultipleParametersTableName,
214+
dynamoDbTableName);
215+
Environment.SetEnvironmentVariable(EnvironmentVariableNames.DynamoDBMultipleParametersParameterId,
216+
dynamoDbHashKey);
217+
218+
var provider = Substitute.For<IDynamoDBProvider>();
219+
provider.GetMultipleAsync(dynamoDbHashKey).Returns(parameterValues);
220+
provider.UseTable(dynamoDbTableName).Returns(provider);
221+
232222
// Act
233-
var helper = new ParameterLookupHelper(provider.Object, parameterProviderType);
223+
var helper = new ParameterLookupHelper(provider, parameterProviderType);
234224
var result = await helper.GetMultipleParametersWithDynamoDBProvider().ConfigureAwait(false);
235-
225+
236226
// Assert
237-
provider.Verify(v => v.GetMultipleAsync(dynamoDbHashKey), Times.Once);
238-
provider.Verify(v => v.UseTable(dynamoDbTableName), Times.Once);
227+
await provider.Received(1).GetMultipleAsync(dynamoDbHashKey);
228+
provider.Received(1).UseTable(dynamoDbTableName);
239229
Assert.NotNull(result);
240230
Assert.Equal(parameterProviderType, result.Provider);
241231
Assert.Equal(parameterLookupMethod, result.Method);
242232
Assert.Equal(dynamoDbHashKey, result.Key);
243-
233+
244234
var values = result.Value as IDictionary<string, string>;
245235
Assert.NotNull(values);
246236
Assert.Equal(parameterValues.Count, values.Count);

0 commit comments

Comments
 (0)