使用 webClient.UploadString 的 C# 单元测试

标签 c# unit-testing

我正在使用 webClient.uploadString(uri,parameter) 方法。 它命中一个返回字符串的 url。每当出现错误请求或其他类似错误时,服务器都会抛出异常。

在进行单元测试时,我需要将响应状态代码与某些特定状态代码进行比较。

UploadString 方法只返回字符串。

我的查询是: 如何从 WebClient 获取响应对象以便比较状态码

最佳答案

只能判断请求失败的状态码:

try
{
    var client = new WebClient();
    client.DownloadString("...");
}
catch (WebException ex)
{
    var statusCode = ((HttpWebResponse)ex.Response).StatusCode;
    ...
}

如果你想在请求成功时确定状态码,你需要 monkey patch 网络客户端...

我实际上建议您使用 HttpClient 代替 WebClient。它有一个好得多的界面:

var client = new HttpClient();
HttpResponseMessage response = client.GetAsync("...").Result;
HttpStatusCode status = response.StatusCode;
string result = response.Content.ReadAsStringAsync().Result;

请记住,您所描述的不是单元测试,而是 integration test。而且它似乎没有用。

关于使用 webClient.UploadString 的 C# 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854723/

相关文章:

c# - 如何在 C++ 中编写 Jon Skeet 的 Singleton?

c# - 如何在 C# 中获取显式事件的调用列表

c# - 对存储库进行单元测试。 N休眠

c# - 无法定义 IList<T>,其中 T 是通用接口(interface)

c# - 在扩展程序中以编程方式访问 visual studio 的 powershell 控制台(程序包管理器控制台)

C# UTF-8编码问题

python - Visual Studio 2019 - 无法运行 Python 单元测试 - 无法导入测试模块 :

c# - TestContext.TestName 属性永远不会改变

java - 在 Java 中如何验证 JUnit 4 异常中的值?

unit-testing - 如何在 Dart 编辑器中运行单元测试?