You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NSubstitute模拟WebResponse返回409冲突状态码时遭遇类型转换异常

使用NSubstitute模拟WebResponse返回409冲突状态码时遭遇类型转换异常

嗨Bryan,这个问题我之前也踩过类似的坑,其实核心原因是你模拟的对象类型不对,导致强制转换失败了。

咱们来拆解一下:你用Substitute.For<WebResponse>()创建的是一个WebResponse的代理对象,它的实际类型是Castle动态生成的Castle.Proxies.WebResponseProxy,这个类只继承自WebResponse,和HttpWebResponse没有任何继承或实现关系,所以你强行把它转成HttpWebResponse的时候,运行时肯定会抛出类型转换异常。

那正确的做法应该是直接模拟HttpWebResponse,而不是父类WebResponse,毕竟你要设置的是HTTP特有的状态码,代码可以改成这样:

// 直接模拟HttpWebResponse类型
HttpWebResponse response = Substitute.For<HttpWebResponse>();
response.StatusCode.Returns(HttpStatusCode.Conflict);

// 如果你的方法需要返回WebResponse类型,直接返回即可,因为HttpWebResponse是它的子类
return response;

这样就不会有类型转换的问题了——因为你创建的代理本身就是HttpWebResponse的子类,直接设置StatusCode完全合法,而且返回的时候也能自动向上转型为WebResponse,完美适配你的方法返回值要求。

备注:内容来源于stack exchange,提问作者Bryan Hunt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:44:30