I’m building an http communicator class for a web service API wrapper
and
I’m trying to go through the BDD process in doing so. I’m having a bit
of a
struggle figuring out how to set up the tests in relation to isolating
things appropriately as well as testing behavior vs testing
implementation.
Specifically, I’m trying to set up a post method on my HttpCommunicator
so I
have the following:
describe FamilyTreeApi::HttpCommunicator, “post” do
it “should accept an endpoint and an xml string to post” # I’m okay with
this one
it “should perform post content to given endpoint”
it “should return a response object”
end
I have written/passed the tests for the first spec, but I’m having
troubles
figuring out how to verify behavior for the second and third, and how to
mock/stub it up. I’ll be using the ‘net/https’ standard libraries to
implement the POST action, and I know that it requires the use of a URI
instance, a Net::HTTP instance, and a Net::HTTP::Post request instance.
I don’t want to hit the actual web service each time I run the test, so
I’d
like to stub or mock this in some way. I think I just need some guidance
on
how to approach something like this.
Do I just ignore the implementation details?
Do I push the actual posting of data to a private method and mock that
method so that I can verify that it is being called?
Would you recommend I actually hit the web service?
Any help is greatly appreciated.