【发布时间】:2009-06-15 18:39:58
【问题描述】:
我的应用中有一些方法可以发出 http 请求。有没有好的方法来模拟单元测试的网络故障和不良响应?
【问题讨论】:
标签: java unit-testing http
我的应用中有一些方法可以发出 http 请求。有没有好的方法来模拟单元测试的网络故障和不良响应?
【问题讨论】:
标签: java unit-testing http
合适的Mock Objects 应该可以让您轻松执行此类模拟;如果你不熟悉这个概念,这里有一个很好的tutorial。
【讨论】:
对于网络故障,没有什么比先拔掉您计算机的以太网电缆(或 d/c 它是无线的)然后拔掉任何可以让您访问云的电缆更好的了。
如果错误响应是指 HTTP 错误,您可以编写总是抛出特定错误的 ASP 脚本。如果您想测试格式错误的 HTTP 数据包,您必须编写一个简单的套接字应用程序来执行此操作。
【讨论】:
将进行 HTTP 调用的库(例如 java.net.URLConnection 或 Commons HttpClient)包装在接口后面,然后编写该接口的实现或模拟失败条件。
您的界面只能代表您的应用程序需要执行的操作,而不是 HTTP 客户端功能的全部范围。
【讨论】:
也许Spring test mocks 会有所帮助。
【讨论】:
在发出请求时拔掉你的网线,或者关闭你的无线路由器:)
【讨论】:
在这种情况下,我们所做的就是抽象出进行调用的层。不要让你的逻辑直接发出 http 请求,而是让你的代码调用一个函数。在该函数中可以是:
if (in_test) {
response = get_test_response();
} else {
response = make_http_request();
}
然后您可以让您的单元测试设置一些可由 get_test_response() 函数访问的值。通过这种方式,您可以以编程方式更改该调用的结果。
【讨论】: