When testing code that consumes a web service, is it bad for the tests/specs to actually hit the api, or should the get/post/whatever requests be stubbed out? I'm currently writing a Ruby gem for a particular micro-blogging api. My tests actually make requests against the api and I was just wondering if maybe I shouldn't be doing that...
on 2009-01-23 16:40
on 2009-01-23 16:58
On Fri, Jan 23, 2009 at 5:38 PM, Brent Collier <firstname.lastname@example.org> wrote: > Two reasons you shouldn't 1) It slows down your tests which means your run them less often or stop testing eventually 2) Your calls will be directly affecting the remote service and actually creating, modifying or deleting things in the process (not usually what you want to do while testing) -- Andrew Timberlake http://ramblingsonrails.com http://www.linkedin.com/in/andrewtimberlake "I have never let my schooling interfere with my education" - Mark Twain
on 2009-01-23 20:16
Brent Collier wrote: > When testing code that consumes a web service, is it bad for the > tests/specs to actually hit the api, or should the get/post/whatever > requests be stubbed out? Two reasons it's bad. The first is a simple rule "never hit the wire at test time". It annoys the remote server, and exposes your test runs to false negatives if that server is down (or when it finally blacklists your development workstation!). The other rule is Mike Feathers's guideline for testing: "Test cases should never touch the file system, the database, or the wires." That's not a rule, it's just a head-game to encourage his disciples to decouple their code and improve its isolation and encapsulation. Intermediate logic code should not have runaway dependencies on low-level code with side-effects. > I'm currently writing a Ruby gem for a particular micro-blogging api. My > tests actually make requests against the api and I was just wondering if > maybe I shouldn't be doing that... Run those tests one last time, with p statements that barf out the low-level responses as strings. Use Mocha to mock the HTTP::Post activity (or whatever), and copy those tests into the .returns(). Then run your tests with your network wire unplugged (yes, and take a long uneasy break from twitter, boingboing, apod, chat, google, RSS, and this newsgroup!), and make sure all your tests still pass.
on 2009-01-24 02:02
Check out fakeweb which can be used to help mock out your web service calls easily: http://technicalpickles.com/posts/stop-net-http-de... Matt On Fri, Jan 23, 2009 at 2:13 PM, Phlip <email@example.com> wrote: > development workstation!). >> > -- > Phlip > > -- Matt Todd Highgroove Studios www.highgroove.com cell: 404-314-2612 blog: maraby.org Scout - Web Monitoring and Reporting Software www.scoutapp.com