使用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
相关产品推荐
相关产品推荐

