gpt4 book ai didi

c# - 如何创建带有 FtpWebResponse 的 WebException 以进行测试?

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:40 26 4
gpt4 key购买 nike

我正在使用 FtpWebRequest 和 transient 故障处理应用程序 block 。对于我的故障处理程序,我有一个错误检测策略来检查响应是否被认为是 transient 的,以便它知道是否重试:

public bool IsTransient(Exception ex)
{

var isTransient = false;
//will be false if the exception is not a web exception.
var webEx = ex as WebException;

//happens when receiving a protocol error.
//This protocol error wraps the inner exception, e.g. a 401 access denied.
if (webEx != null && webEx.Status == WebExceptionStatus.ProtocolError)
{
var response = webEx.Response as FtpWebResponse;
if (response != null && (int)response.StatusCode < 400)
{
isTransient = true;
}
}
// if it is a web exception but not a protocol error,
// check the status code.
else if (webEx != null)
{
//(check for transient error statuses here...)
isTransient = true;
}

return isTransient;
}

我正在尝试编写一些测试来检查是否将适当的错误标记为暂时性错误,但是我在创建或模拟具有 FtpWebResponse 内部异常的 Web 异常时遇到了麻烦(以便以下并不总是空的)

var response = webEx.Response as FtpWebResponse;

有人知道我该怎么做吗?我的做法是否正确?

最佳答案

WebException 上使用适当的构造函数来设置响应:

public WebException(
string message,
Exception innerException,
WebExceptionStatus status,
WebResponse response)

setting up an exception with an FtpWebResponse is the bit that I'm having trouble with... FtpWebResponse has an internal constructor that I can't access.

BCL 并不是真正为测试而设计的,因为这个概念在编写时并不重要。您必须使用反射调用该内部构造函数(使用反编译器查看可用的内容)。或者,使用自定义可模拟类包装您需要的所有 System.Net 类。不过,这看起来工作量很大。

关于c# - 如何创建带有 FtpWebResponse 的 WebException 以进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799669/

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