【问题标题】:How to await a Task inside of a test method如何在测试方法中等待任务
【发布时间】:2015-12-17 16:11:34
【问题描述】:

在我的存储库的单元测试项目中,我正在创建一个清理方法来删除由测试创建的所有记录。这是我想要做的:

private void DeleteTestExtensions()
{
    var authorization = _extensionRepository.GetAuthorizationByTaxAccountIdAndYear(_testTaxAccountId, _testTaxAccountYear);
    var extensions =  await _extensionRepository.GetExtensionsByUserIdAsync(_testUserId);
    foreach (var extension in extensions)
    {
        try
        {
            _extensionRepository.DeleteExtension(extension.ExtensionID);
        }
    }

    _extensionRepository.DeleteAuthorization(authorization.ExtensionAuthorizationID);
}

第一个是同步的,按预期工作,但第二个方法是异步的,告诉我the await operator can only be used on an async method,但每当我将鼠标悬停在GetExtensionsByUserIdAsync 上时,我可以看到(而且我知道)它被定义为

(awaitable) Task<List<Extension>> IExtensionRepository.GetExtensionsByUserIdAsync(Guid userID)

那么为什么它会告诉我当它明显是异步的时候我不能使用 await 呢?

【问题讨论】:

  • DeleteTestExtensions 必须是 async。最好是async Task.
  • NUnit 和 XUnit 等测试框架已经支持 async - 例如here
  • @DanielKelley 哦,你完全正确。谢谢!想提交这个作为答案吗?

标签: c# unit-testing asynchronous


【解决方案1】:

该消息实际上与DeleteTestExtensions 相关,必须标记为async,而不是GetExtensionsByUserIdAsync

所以你的方法签名会变成:

private async Task DeleteTestExtensions()

注意将方法标记为返回Task 意味着它可以依次等待。

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 2014-10-20
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多