Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用单元测试WebRequest c覆盖#_C#_.net_Unit Testing_Design Patterns - Fatal编程技术网

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()
?问题是mock
GetResponse()
没有问题,因为我们围绕
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;
        }