单元测试中Mock RestResponse未触发RestSharp的AdvancedResponseWriter如何解决?
问题原因
AdvancedResponseWriter 是 RestSharp 原生执行请求的逻辑中,拿到服务端响应流后主动调用的委托,你当前的 Mock 逻辑仅直接返回构造好的 RestResponse 对象,没有处理请求对象中挂载的 AdvancedResponseWriter 委托,因此不会触发执行。
解决方案
修改 Mock 的 Setup 逻辑,捕获传入的请求对象,在返回响应前手动调用挂载的 AdvancedResponseWriter:
mock .Setup(m => m.ExecuteAsync(It.IsAny<RestRequest>(), It.IsAny<CancellationToken>())) .ReturnsAsync((RestRequest req, CancellationToken ct) => { var response = new RestResponse { Content = Guid.NewGuid().ToString(), StatusCode = HttpStatusCode.OK, RawBytes = Encoding.UTF8.GetBytes("gfgdfgdfgdfg") }; // 手动触发请求绑定的AdvancedResponseWriter if (req.AdvancedResponseWriter != null) { using var responseStream = new MemoryStream(response.RawBytes); req.AdvancedResponseWriter(responseStream, response); } return response; });
补充说明
如果你的代码中用到的是异步版本的 AdvancedResponseWriterAsync,只需要将调用逻辑改成对应的异步执行即可。
内容的提问来源于stack exchange,提问作者Michael Snytko
相关产品推荐
相关产品推荐

