如何测试方法包括Unity中的异步方法
How to test method include async method in Unity
我想使用异步方法测试方法。
但是,当我 运行 测试时,UnityEditor 正在阻塞。
我想,这个问题是因为异步方法。
我不知道如何解决这个问题。
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时,因为你已经完成了返回字符串类型的Task,但是对于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 suggests. Otherwise, if you are locked and not able to upgrade, you can do something which I am not suggesting as this answer 所述。
[Test]
public void Test_GetData()
{
var result = GetAsync().GetAwaiter();
Assert.AreEqual("test", result.GetResult());
}
我想使用异步方法测试方法。 但是,当我 运行 测试时,UnityEditor 正在阻塞。
我想,这个问题是因为异步方法。 我不知道如何解决这个问题。
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时,因为你已经完成了返回字符串类型的Task,但是对于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 suggests. Otherwise, if you are locked and not able to upgrade, you can do something which I am not suggesting as this answer 所述。
[Test]
public void Test_GetData()
{
var result = GetAsync().GetAwaiter();
Assert.AreEqual("test", result.GetResult());
}