Testing against an api

B

Brent Collier

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...
 
A

Andrew Timberlake

[Note: parts of this message were removed to make it a legal post.]

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...
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
 
P

Phlip

Brent said:
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.
 
M

Matt Todd

[Note: parts of this message were removed to make it a legal post.]

Check out fakeweb which can be used to help mock out your web service calls
easily:
http://technicalpickles.com/posts/stop-net-http-dead-in-its-tracks-with-fakeweb

Matt



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

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.


--
Matt Todd
Highgroove Studios
www.highgroove.com
cell: 404-314-2612
blog: maraby.org

Scout - Web Monitoring and Reporting Software
www.scoutapp.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,997
Messages
2,570,241
Members
46,831
Latest member
RusselWill

Latest Threads

Top