我想用异步方法测试这个方法.

我认为,这个问题是因为异步方法.

Unity版本:Unity 2020.3.33f1

public async static Task<string> GetAsync() {

    // Do something
    HttpResponseMessage response = await request.GetAsync(..);
    string responseData = await response.Content.ReadAsStringAsync();


    return response Data
}

...


public string GetData() {
    Task<string> res = GetAsync();
    return res.Result;
}


////////////////// Test Code //////////////

[Test]
public void Test_GetData() {
   ...
   string res = GetData()
   ...
}


推荐答案

在不进行测试的情况下,您需要在所有地方使用async/await.

当使用async/await时,正如您已经完成了返回字符串类型的任务,但对于void方法,您只需要使用Task.

比方说

public static async Task<string> GetAsync()
{
    return await Task.FromResult("test");
}

你的测试应该是这样的:

[Test]
public async Task Test_GetAsync()
{
    var result = await GetAsync();
    Assert.AreEqual("test", result);
}

如果我们这么认为你的代码

public async static Task<string> GetAsync() {
    // what ever
    .....
    return responseData
}

测试将是:

[Test]
public async Task Test_GetData() {
   ...
   string res = await GetData()
   ...
}

如果您的测试项目是较旧的.net框架,您可以按照这answer条建议将其升级到新版本.否则,如果你被锁定并且无法升级,你可以做一些我并没有像这answer条提到的那样建议的事情.

[Test]
public void Test_GetData()
{
    var result = GetAsync().GetAwaiter();
    Assert.AreEqual("test", result.GetResult());
}

Csharp相关问答推荐

如何将两个查询结果组合在C#ASP.NET MHC控制器中

System.Data.SQLite:判断SQLite数据库是否为空(任何表中至少有一行)

当打印一行x个项目时,如何打印最后一行项目?

Blazor-从数据库内部服务器提取错误

JSON空引用异常仅在调试器中忽略try-Catch块,但在其他上下文中捕获得很好

如何在C#中实现非抛出`MinBy`?

如何使用EF Core和.NET 8来upsert到具有多对多关系的表?

什么时候接受(等待)信号灯?尽可能的本地化?

DbContext-传递自定义配置选项

委托RequestDelegate不带2个参数-ASP.NET Core 8最小API

同一组件的多个实例触发相同的事件处理程序

为什么我的伺服电机不动,下面的代码?

解决方案:延长ABP框架和ANGING OpenIddict中的令牌生命周期

如何在C#中正确类型化带有泛型的嵌套类

如何正确处置所有动态控件?

C#Microsoft.CodeAnalysis.CSharp.Scriiting不等待并行.对于

Foreach非常慢的C#

FakeItEasy自动嘲弄内容

Xamarin.Forms-如何创建可 Select 的显示alert 或弹出窗口?

当我在Git中暂存文件更改时,它们会消失