Incremental development with Monorail: Part Three
In the last instalment we finished up with a suite of passing tests. However, we’ve yet to produce anything remotely usable so lets continue by reaching down further and driving out our services/persistence. We’ll start by writing the following test:
We’ve meddled with our test setup a little to introduce the MockRepository for mocking out our PostController’s new dependency on the IBlogPostService. Our test now calls the AddPost method on our service interface and sets up the resulting AddPostResponseDto. Running the test produces a bunch of compiler whinging so we best implement the newly introduced bits:
These are the only changes and additions we’ve made in order for the tests to compile and run. Running our test now produces the following result:
As we’ve yet to modify the PostController.Save(…) call to include a call the newly introduced IBlogPostService dependency. Lets go ahead and do this now:
We’ve now included the call to our newly introduced service and we set the responseMessage if the response is signaled as successful. Lets run our test now:
It works, ship it! Actually no, again we’re pretty low on actual functionality right now. Remember we’ve yet to actually drive out any implementation of the IBlogPostService interface as yet and I expect that the acceptance test will fail horribly since we didn’t wire up the necessary container configuration either. Lets go ahead and run the whole test suite and see what gives:
In the brief moments the browser appears during the test we can see the following:
Hmm, as I predicted earlier our application fails to run due to the lack of proper container configuration. Before we can do this we need to implement the IBlogPostService interface somewhere. We need to write a failing test to begin our foray into the implementation of a BlogPostService:
Lets create the BlogPostService only performing the steps necessary to pass the test above:
Run the test:
Now we have a working BlogPostService we can now wire up our container configuration to pass the acceptance test:
Now running the full suite of tests produces the following:
Our tests pass!
That’s it for this post. I’ve checked in the latest changes to the repository. In the next post we’ll continue our efforts and begin to implement validation on our screen-bound DTO’s.
Google code hosted project: http://code.google.com/p/mr-blogengine/