我正在开发一个可以访问Web服务的应用程序。我想开发一个代理类,它可以从服务返回一个虚假的响应,这样我就不必在开发/测试应用程序的其他部分时不断地用请求来命中它。
我的应用程序需要通过Net::HTTP生成响应。
response = Net::HTTP.get(URI.parse('http://foo.com'))
case response
when Net::HTTPOK
# do something fun
when Net::HTTPUnauthorized
# you get the idea
我如何制造一个响应对象,给予它所有正确的头,返回一个主体字符串,等等?
response = ProxyClass.response_object
case response
when Net::HTTPOk
# my app doesn't know it's being lied to
- 谢谢-谢谢
8条答案
按热度按时间piok6c0g1#
实际上,用Net::HTTP直接滚动自己的假响应并不难。
由于很少有人再使用原始的Net::HTTP,因此(可选)最后一行将其 Package 为
RestClient::Response
,然后可以将其存根到RestClient中:ryhaxcpt2#
我会从FakeWeb开始,看看它是否满足您的需求。如果它不满足您的需求,您可以从内部删除任何您需要的东西,创建您自己的解决方案。
inn6fuwd3#
我知道这篇文章很老了,但是不要使用FakeWeb,它似乎已经基本上死了,试试webmock。它似乎功能更全,而且非常活跃。
4si2a6ki4#
我会调查像mocha这样的模拟库。
然后,您应该能够设置一个模拟对象来帮助测试:
下面的示例来自Tim Stephenson's RaddOnline blog,其中还包括一个更完整的教程:
1u4esq0p5#
为了测试一个web服务客户端,我们使用Sinatra,一个可爱的轻量级web框架,它可以让你非常快速和容易地启动和运行一些东西。它在5行代码中有一个完整的Hello World应用程序,以及两个安装和运行整个应用程序的命令。
r6hnlfcb6#
最后我使用了一个结构。
缺点是
.status
和['body']
也是有效的,但我不认为这有多大关系。4xrmg8kj7#
我会使用上面提到的FakeWeb,或者让我的rake测试任务启动一个Webrick示例到一个小的sinatra应用程序,它模拟您希望看到的各种测试响应。
xmjla07d8#
您可以考虑使用机架为这应该可以让您做的一切您需要的。