【问题标题】:Cover with unit test WebRequest c#覆盖单元测试WebRequest c#
【发布时间】:2018-04-27 18:55:46
【问题描述】:
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;
        }

_webrequestWrapper 只是 WebRequest 类的包装。 所以,我的问题是如何模拟 _webRequestWrapper.GetResponse().GetResponseStream() ?问题是模拟GetResponse() 没有问题,因为我们为它创建了WebRequest 的包装器,但问题在于GetReponseStream,因为它返回一个Stream 对象,我如何测试HandleRequest() 方法? 我真的没有任何想法。请帮我。 谢谢

【问题讨论】:

  • 你想测试什么?看起来您正在阅读响应流,这不值得测试 IMO。如果您有更多已排除的逻辑,请将其分解为单独的方法并为其编写测试。
  • 我只想测试 HandleRequest() 但我不确定它是否值得测试。你能解释一下为什么不需要测试吗?
  • 我同意你不应该费心测试响应流读取;它是您的应用程序的外部依赖项。如果您确实需要对其进行测试,那么使用 shim 可能是最好的方法。 See this.
  • 你的代码唯一要做的就是model.Verification = reader.ReadToEnd();,所以你要测试你是否可以在一个对象上设置一个属性。我很确定这在大多数情况下都会起作用。您在WebRequest 及其朋友遇到的任何问题都应该使用try/catch 块来处理。
  • 完全同意你的看法。感谢您的帮助。您能否添加作为答案,以便我可以投票给您

标签: c# .net unit-testing design-patterns


【解决方案1】:

我在HandleRequest(WebhookModel model) 中看不到任何值得测试的内容。

您的代码唯一要做的就是model.Verification = reader.ReadToEnd();,因此您将测试是否可以在对象上设置属性。我很确定这在大多数情况下都会起作用。

您在WebRequest 和相关 I/O 类中遇到的任何问题都应该使用 try/catch 块来处理。

单元测试适用于业务逻辑或关于输入和输出的一般假设,并且应该相当容易创建和维护。如果您发现自己花费大量时间模拟 I/O 类,那么请考虑是否可以将可测试的工作单元分解为单独的(最好是静态的)方法。你会让你和同事的生活更轻松。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2018-10-18
    相关资源
    最近更新 更多