【问题标题】:Testing methods that make http requests发出 http 请求的测试方法
【发布时间】:2009-06-15 18:39:58
【问题描述】:

我的应用中有一些方法可以发出 http 请求。有没有好的方法来模拟单元测试的网络故障和不良响应?

【问题讨论】:

    标签: java unit-testing http


    【解决方案1】:

    合适的Mock Objects 应该可以让您轻松执行此类模拟;如果你不熟悉这个概念,这里有一个很好的tutorial

    【讨论】:

    • 教程链接已过期。
    【解决方案2】:

    对于网络故障,没有什么比先拔掉您计算机的以太网电缆(或 d/c 它是无线的)然后拔掉任何可以让您访问云的电缆更好的了。

    如果错误响应是指 HTTP 错误,您可以编写总是抛出特定错误的 ASP 脚本。如果您想测试格式错误的 HTTP 数据包,您必须编写一个简单的套接字应用程序来执行此操作。

    【讨论】:

    • 不确定如何将电缆拔出过程集成到自动构建系统中;-)
    【解决方案3】:

    你试过HTTPUnitJWebUnit吗?

    【讨论】:

      【解决方案4】:

      将进行 HTTP 调用的库(例如 java.net.URLConnection 或 Commons HttpClient)包装在接口后面,然后编写该接口的实现或模拟失败条件。

      您的界面只能代表您的应用程序需要执行的操作,而不是 HTTP 客户端功能的全部范围。

      【讨论】:

        【解决方案5】:

        也许Spring test mocks 会有所帮助。

        【讨论】:

          【解决方案6】:

          在发出请求时拔掉你的网线,或者关闭你的无线路由器:)

          【讨论】:

            【解决方案7】:

            在这种情况下,我们所做的就是抽象出进行调用的层。不要让你的逻辑直接发出 http 请求,而是让你的代码调用一个函数。在该函数中可以是:

            if (in_test) {
               response = get_test_response();
            } else {
               response = make_http_request();
            }
            

            然后您可以让您的单元测试设置一些可由 get_test_response() 函数访问的值。通过这种方式,您可以以编程方式更改该调用的结果。

            【讨论】:

            • 在您的应用程序中使用这种逻辑通常是一种不好的形式。我建议使用模拟对象。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-18
            • 1970-01-01
            • 2012-08-26
            • 2019-11-30
            • 1970-01-01
            相关资源
            最近更新 更多