gpt4 book ai didi

c# - 使用 NUnit 和 C# 进行异步单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:03 25 4
gpt4 key购买 nike

我创建了以下方法,它只是从 HTTP 服务器检索数据没什么特别的,但它是一个异步方法。

public async Task<string> GetStringFromConsul(string key)
{
string s = "";

// attempts to get a string from Consul
try
{
//async method to get the response
HttpResponseMessage response = await this.http.GetAsync(apiPrefix + key);

//if it responds successfully
if (response.IsSuccessStatusCode)
{
//parse out a string and decode said string
s = await response.Content.ReadAsStringAsync();
var obj = JsonConvert.DeserializeObject<List<consulValue>>(s);
s = Encoding.UTF8.GetString(Convert.FromBase64String(obj[0].value));
}
else
{
s = requestErrorCodePrefix + response.StatusCode + ">";
}
}
catch(Exception e)
{
//need to do something with the exception
s = requestExceptionPrefix + e.ToString() + ">";
}

return s;
}

然后在测试中我像正常执行时一样调用代码:

[Test]
public async Task GetStringFromConsulTest()
{
ConsulConfiguration cc = new ConsulConfiguration();

string a = cc.GetStringFromConsul("").GetAwaiter().GetResult();
Assert.AreEqual(a, "");
}

但是我得到了这样的异常,而不是任何类型的字符串:

Message:   Expected string length 514 but was 0. Strings differ at index 0.
Expected: "<Request Exception: System.Threading.Tasks.TaskCanceledExcept..."
But was: <string.Empty>

我环顾四周,找到了一些关于此的教程并尝试了但无济于事。如果有人能指出我正确的方向,我将不胜感激,我是 C# 单元测试的新手。

最佳答案

我是一个很好的错误消息的坚持者,所以我首先将断言更改为

Assert.AreEqual("", a);

因为第一个 参数是您的期望值。现在它将失败

Message:   Expected string length 0 but was 514. Strings differ at index 0.
Expected: <string.Empty>
But was: "<Request Exception: System.Threading.Tasks.TaskCanceledExcept..."

...仍然是一个失败,但一个更明智的消息。

接下来,按照 M Hassan 的建议,为您的异步方法调用添加一个 await。

关于c# - 使用 NUnit 和 C# 进行异步单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com