@@ -214,6 +214,140 @@ Another common case is to mock an async method call to execute custom logic befo
214
214
End Function
215
215
{{endregion}}
216
216
217
+ ## Return a Value for an Async Method from a Mocking Container (Automocking)
218
+
219
+ In scenarios where a class has dependencies involving asynchronous methods, it is possible to create a [ Mocking Container] ({%slug justmock/basic-usage/automocking%}). The ` ReturnsAsync ` method can then be used to provide a custom return value for the asynchronous method.
220
+
221
+ To take a look at this scenario, we will use the following code:
222
+
223
+ #### __ [ C#] __
224
+ {{region ReturnAsync#TaskClient}}
225
+
226
+ public interface ITaskAsync
227
+ {
228
+ Task<int> GenericTaskWithValueReturnTypeAndOneParam(int value);
229
+ }
230
+
231
+ public class TaskClient
232
+ {
233
+ private ITaskAsync task;
234
+
235
+ public TaskClient(ITaskAsync t)
236
+ {
237
+ task = t;
238
+ }
239
+
240
+ public async Task<int> TaskUsageWithValue()
241
+ {
242
+ return await task.GenericTaskWithValueReturnTypeAndOneParam(10);
243
+ }
244
+ }
245
+ {{endregion}}
246
+
247
+ #### __ [ VB] __
248
+ {{region ReturnAsync#TaskClient}}
249
+
250
+ Public Interface ITaskAsync
251
+ Function GenericTaskWithValueReturnTypeAndOneParam(value As Integer) As Task(Of Integer)
252
+ End Interface
253
+
254
+ Public Class TaskClient
255
+ Private task As ITaskAsync
256
+
257
+ Public Sub New(t As ITaskAsync)
258
+ task = t
259
+ End Sub
260
+
261
+ Public Async Function TaskUsageWithValue() As Task(Of Integer)
262
+ Return Await task.GenericTaskWithValueReturnTypeAndOneParam(10)
263
+ End Function
264
+ End Class
265
+ {{endregion}}
266
+
267
+ In ** Example 5** , we demonstrate the basic usage of ReturnsAsync with MockingContainer using type inference.
268
+
269
+ #### __ [ C#] Example 5: Using ReturnsAsync with MockingContainer__
270
+
271
+ {{region ReturnAsync#TestTaskAutomockingReturnsAsyncResult}}
272
+
273
+ [TestMethod]
274
+ public async Task TestTaskAutomockingReturnsAsyncResult()
275
+ {
276
+ // Arange
277
+ var container = new MockingContainer<TaskClient >();
278
+ var expectedResult = 10;
279
+
280
+ container.Arrange<ITaskAsync>(t => t.GenericTaskWithValueReturnTypeAndOneParam(Arg.AnyInt)).ReturnsAsync(expectedResult);
281
+
282
+ // Act
283
+ var actualResult = await container.Instance.TaskUsageWithValue();
284
+
285
+ // Assert
286
+ Assert.Equals(expectedResult, actualResult);
287
+ }
288
+ {{endregion}}
289
+
290
+ #### __ [ VB] Example 5: Using ReturnsAsync with MockingContainer__
291
+ {{region ReturnAsync#TestTaskAutomockingReturnsAsyncResult}}
292
+
293
+ <TestMethod>
294
+ Public Async Function TestTaskAutomockingReturnsAsyncResult() As Task
295
+ ' Arange
296
+ Dim container = New MockingContainer(Of TaskClient)()
297
+ Dim expectedResult = 10
298
+
299
+ container.Arrange(Of ITaskAsync)(Function(t) t.GenericTaskWithValueReturnTypeAndOneParam(Arg.AnyInt)).ReturnsAsync(expectedResult)
300
+
301
+ ' Act
302
+ Dim actualResult = Await container.Instance.TaskUsageWithValue()
303
+
304
+ ' Assert
305
+ Assert.Equals(expectedResult, actualResult)
306
+ End Function
307
+ {{endregion}}
308
+
309
+ In ** Example 6** , we extend this by explicitly specifying the return type, showing a more controlled and type-safe approach.
310
+
311
+ ### __ [ C#] Example 6: Extending ReturnsAsync with Explicit Return Type in MockingContainer__
312
+
313
+ {{region ReturnAsync#TestTaskAutomockingAsyncResultWithIntParameter}}
314
+
315
+ [TestMethod]
316
+ public async Task TestTaskAutomockingAsyncResultWithIntParameter()
317
+ {
318
+ // Arange
319
+ var container = new MockingContainer<TaskClient >();
320
+ var expectedResult = 10;
321
+
322
+ container.Arrange<ITaskAsync, int>(t => t.GenericTaskWithValueReturnTypeAndOneParam(Arg.AnyInt)).ReturnsAsync(expectedResult);
323
+
324
+ // Act
325
+ var actualResult = await container.Instance.TaskUsageWithValue();
326
+
327
+ // Assert
328
+ Assert.Equals(expectedResult, actualResult);
329
+ }
330
+ {{endregion}}
331
+
332
+ ### __ [ VB] Example 6: Extending ReturnsAsync with Explicit Return Type in MockingContainer__
333
+
334
+ {{region ReturnAsync#TestTaskAutomockingAsyncResultWithIntParameter}}
335
+
336
+ <TestMethod >
337
+ Public Async Function TestTaskAutomockingAsyncResultWithIntParameter() As Task
338
+ ' Arange
339
+ Dim container = New MockingContainer(Of TaskClient)()
340
+ Dim expectedResult = 10
341
+
342
+ container.Arrange(Of ITaskAsync, Integer)(Function(t) t.GenericTaskWithValueReturnTypeAndOneParam(Arg.AnyInt)).ReturnsAsync(expectedResult)
343
+
344
+ ' Act
345
+ Dim actualResult = Await container.Instance.TaskUsageWithValue()
346
+
347
+ ' Assert
348
+ Assert.Equals(expectedResult, actualResult)
349
+ End Function
350
+ {{endregion}}
217
351
218
352
## Testing Exception Handling for Async Methods
219
353
0 commit comments