C# 用单元测试WebRequest c覆盖#
其中C# 用单元测试WebRequest c覆盖#,c#,.net,unit-testing,design-patterns,C#,.net,Unit Testing,Design Patterns,其中\u webrequestWrapper只是WebRequest类的包装。 所以,我的问题是如何模拟\u webRequestWrapper.GetResponse().GetResponseStream()?问题是mockGetResponse()没有问题,因为我们围绕WebRequest为它创建了包装器,但问题在于getresponsestream,因为它返回一个流对象,我如何测试HandleRequest()方法? 我真的没有任何想法。请帮帮我。 谢谢我在HandlerRequest(
\u webrequestWrapper
只是WebRequest
类的包装。
所以,我的问题是如何模拟\u webRequestWrapper.GetResponse().GetResponseStream()
?问题是mockGetResponse()
没有问题,因为我们围绕WebRequest
为它创建了包装器,但问题在于getresponsestream,因为它返回一个流对象,我如何测试HandleRequest()
方法?
我真的没有任何想法。请帮帮我。
谢谢我在
HandlerRequest(WebhookModel模型)
中没有看到任何值得测试的内容
代码所做的唯一事情就是model.Verification=reader.ReadToEnd()代码>,因此您将测试是否可以在对象上设置属性。我很肯定这在大多数情况下都会奏效
使用WebRequest
和相关I/O类遇到的任何问题都应该使用try/catch块来处理
单元测试适用于业务逻辑或关于输入和输出的一般假设,并且应该相当容易创建和维护。如果你发现自己花很多时间嘲笑I/O类,那么考虑一下你是否可以将可测试的工作单元分成单独的(最好是静态的)方法。你会让你和同事的生活更轻松。你想测试什么?看起来您正在读取响应流,这在IMO中不值得测试。如果您排除了更多的逻辑,请将其分解为单独的方法并为其编写测试。我只想测试HandleRequest(),但我不确定它是否值得测试。你能解释一下为什么不需要测试它吗?我同意你不应该费心测试响应流读取;它是应用程序的外部依赖项。如果您确实需要测试,使用垫片可能是最好的方法。代码所做的唯一事情就是model.Verification=reader.ReadToEnd()代码>,因此您将测试是否可以在对象上设置属性。我很肯定这在大多数情况下都会奏效。您在WebRequest
及其好友中遇到的任何问题都应该使用try/catch
块来处理。完全同意您的意见。谢谢你的帮助。你能补充一下答案吗?这样我就可以投票给你了
public void HandleRequest(WebhookModel model)
{
var strRequest = "cmd=_notify-validate&" + ipnContext.RequestBody;
var webRequest = FormRequest(strRequest);
var requestStream = _webRequestWrapper.GetRequestStream();
var responseStream = _webRequestWrapper.GetResponse().GetResponseStream();
using (StreamReader reader = new StreamReader(responseStream))
{
model.Verification = reader.ReadToEnd();
}
}
private WebRequest FormRequest(string strRequest)
{
var webRequest = WebRequest.Create("some url is over here");
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = strRequest.Length;
return webRequest;
}