O truque é criar uma instância de uma TaskCompleteSource
classe. Com esta instância, você estará interessado neste método e propriedades:
SetResult(...)
Task
dado o seguinte método de interface
public Task<IFtpResult> ftpClient.GetDataAsync() { .. }
e, em seguida, dado o seguinte código que executa este método
IFtpResult ftpResult = await ftpClient.GetDataAsync();
isso pode ser ridicularizado como
var fakeResult = new FtpResult(); // Don't forget to create fake data.
var tcs = new TaskCompletionSource<IFtpResult>();
tcsSetResult(fakeResult);
mockFtpClient
.Setup(x => x.GetDataAsync())
.Returns(tcs.Task);
Portanto, primeiro criamos alguma instância TaskCompletionSource falsa. Nisso dizemos Quando esta tarefa foi concluída, esta é a instância-objeto que gostaria que fosse devolvido.
Então, simplesmente definimos o método mock e o resultado esperado .. que é um Task
que foi falsificado para retornar nosso hardcoded fakeResult
.