gpt4 book ai didi

.net - 模拟 .NET HttpWebRequest 的连接问题

转载 作者:行者123 更新时间:2023-11-28 20:04:26 25 4
gpt4 key购买 nike

在使用 HttpWebRequest 类时,有没有办法以编程方式模拟连接问题(连接速度慢、响应未完成、连接断开等)?

谢谢

编辑:为了详细说明,我需要这个来调试,但最终想把它变成一个测试。我正在使用异步方法 BeginGetRequestStream、EndGetRequestStream、BeginGetResponse 和 EndGetResponse。我已将它们全部包装在适当的(我希望)Try Catch block 中,记录发生的异常。

我知道这适用于某些情况(例如,当我拔出网络电缆时)。但是在极少数情况下(即仅当我请求的网站速度很慢时)我的系统崩溃了,我在事件日志中得到了这个

Exception: System.Net.WebException

Message: The request was aborted: The connection was closed unexpectedly.

StackTrace: at System.Net.ConnectStream.BeginRead(Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Object state)
at System.IO.Compression.DeflateStream.ReadCallback(IAsyncResult baseStreamResult)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.ContextAwareResult.CompleteCallback(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

我假设它来自 HttpWebRequest,但我的所有代码又都包含在 Try Catch block 中。

在这种情况下模拟会有帮助吗?

最佳答案

@克里斯不幸的是,微软忽略了make many of the BCL objects easily mockable ,因为它们倾向于使用抽象类,而 .NET 类在设计上是封闭的(换句话说,对于要被子类覆盖的方法,需要将其显式标记为虚拟),而 Java 在设计上是开放的(即也就是说,子类可以覆盖任何方法,除非它们被标记为 final)。使用接口(interface)或将方法标记为虚拟方法可以在测试空间中省去很多麻烦。微软现在可能拥有可测试性信仰(例如 ASP.NET MVC),但对于 BCL 来说有点晚了。

Typemock 隔离器 may be able to help ,但在这种情况下,我不相信最小起订量可以。

关于.net - 模拟 .NET HttpWebRequest 的连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/278160/

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