如何在没有类型的情况下单元测试aync Task

sto*_*tom 1 .net c# unit-testing async-await

我有async没有任何返回类型的方法,它只有Task类型.

我怎样才能编写有效的单元测试方法Task

异步方法:

public async Task UploadFileAsync(FileDetails data)
{

   await _fileUpload.UploadImageAsync(data);

}


public async Task UploadImageAsync(FileDetails data)
{  

// does a async operation to upload a stream to azure blob storage

await azureBlob.UploadFromStreamAsync(streamData).ConfigureAwait(false)

}
Run Code Online (Sandbox Code Playgroud)

测试方法:

[TestMethod]
public async Task UploadFileAsync()
{
    //-->Arrange

    _fileUpload.Setup(e => e.UploadImageAsync().Returns(new Task<Task>(() => null));

    //-->Act

    Task result = _uploadManager.UploadFileAsync(GetFakeUploadData());

    // Task doesn't return any result ?

    //-->Assert


}
Run Code Online (Sandbox Code Playgroud)

更新:

最后我调用方法将文件上传到azure blob存储.

Ada*_*Dev 7

您只需将法案部分更改为:

//-->Arrange

_fileUpload
    .Setup(e => e.UploadImageAsync(It.IsAny<FileDetails>()))
    .Returns(Task.FromResult<object>((object)null))
    .Verifiable(); //<-- Allows you to verify that the mock was invoked correctly

//Act
await _uploadManager.UploadFileAsync(GetFakeUploadData());

//Assert
_fileUpload.Verify();
Run Code Online (Sandbox Code Playgroud)

参考Moq Quickstart以更好地理解如何使用Moq框架.

  • @stom你在OP中没有足够的细节让我们能够猜出你想要测试的是什么.您可以尝试验证模拟是否被调用. (2认同)