Faking Asynchronous Methods
You can fake async methods.
When to Use
When the method you wish to test is Asynchronous.
Syntax
C# Isolate.WhenCalled(()=>ClassUnderTest.method()).WillReturn(Task.FromResult(return value));
var result = await ClassUnderTest.method();
VB Isolate.WhenCalled(Function() ClassUnderTest.method()).WillReturn(Task.FromResult(return value))
Dim result = Await ClassUnderTest.method()
Sample 1: Faking the Result of an Asynchronous method
The following sample shows how to fake the result of an async method.
Method Under Test:
C# public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); }
VB
Public Async Function Login(model As LoginViewModel, returnUrl As String) As Task(Of ActionResult)
Dim result = Await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout := False)
End Function
Test:
C# var controller = new AccountController(); // Faking an async method, note that we are using Task.FromResult Isolate.WhenCalled(() => controller.SignInManager.PasswordSignInAsync(null, null, true, true)).WillReturn(Task.FromResult(SignInStatus.Failure)); var result = await controller.Login(loginData, "http://www.typemock.com/");
VB
Dim controller = New AccountController()
' Faking an async method, note that we are using Task.FromResult
Isolate.WhenCalled(Function() controller.SignInManager.PasswordSignInAsync(Nothing, Nothing, True, True)).WillReturn(Task.FromResult(SignInStatus.Failure))
Dim result = Await controller.Login(loginData, "http://www.typemock.com/")