Friday, October 16, 2009

Chapter 9: Driving Development with Customer Tests: Exposing a Failure Condition












Chapter 9: Driving Development with Customer Tests: Exposing a Failure Condition



Overview



In the previous chapter, we defined a customer test for adding and deleting a review from the database and then built the implementation accordingly. In this chapter, we enhance the AddReview Web service to prevent a reviewer from submitting multiple reviews for the same recording. When a reviewer attempts to do this, the Web service should not add the review to the database; it should return the id of the review that already exists in the database. Here is this requirement expressed as a customer test:




































fit.ActionFixture



start



CustomerTests.ReviewAdapter



enter



FindByRecordingId



100001



enter



SetRating



4



enter



SetContent



Test Fit Content



enter



SetReviewerName



Example Reviewer



enter



AddReview



check



ReviewAdded



False



check



ExistingReviewId



100002





To run this script, we need to add a method, named ExistingReviewId, to the ReviewAdapter. For now, let’s fake the implementation and have the method always return 0. Let’s run the script and see if we get the failures that we anticipate. Here is the output of the script:










































fit.ActionFixture



start



CustomerTests.ReviewAdapter



enter



FindByRecordingId



100001



enter



SetRating



4



enter



SetContent



Test Fit Content



enter



SetReviewerName



Example Reviewer



enter



AddReview



check



ReviewAdded



False expected



True actual



check



ExistingReviewId



100002 expected



0 actual




The script fails as anticipated because there is nothing in the implementation that prevents the user from adding a review to a recording as many times as he likes. In turn, we also run the programmer tests. Because all the programmer tests pass, there must be a missing programmer test. Let’s write a programmer test that exposes the problem and drives the implementation.











No comments:

Post a Comment