Overview of Testing a RIA with Spring and Spring MVC
I feel I should create a set of blog posts related to how I am doing testing with this technology stack. Sometimes this aggregation is helpful. In my team, we are testing at the following levels:
- unit testing of everyting - pure tests, typically single class only, with mock (using Mockito)
- integration testing of our services - out of container (web server) testing, but with db
- integration testing of our controllers - in container testing, with db
- functional testing of our ui (TBD) - full in container testing
This blog will focus on integration testing.
Integration testing, different from unit testing, tests the code as it is wired up to other components, the server and the data base as well.
Testing the controller layer in Spring MVC
To set the stage, I am using spring 3 with Spring MVC for my application. In particular, I am leveraging a lot of Ajax, accessing the controller from the browser and transporting JSON. I am using the Jackson JSON mapping implementation to marshal to from beans to JSON.
I need to create good integration tests of my controller classes so I can run JUnit tests that connect with the deployed web app and interact RESTfully like the client UI, passing JSON objects back and forth.
A helpful blog post I have used for guidance: is ralf.schaeftlein s blog detailing an approach to integration testing of restful MVC controllers with JSON. Exactly what I was interested in.
The basic steps seem to be:
- create a unit test with java4 leveraging Spring 3 Integration Test Annotations
- configure your application context XML to define your mappers that will convert between JSON and beans
- write your tests pojo style
In this case, I am testing my Data Repository, which is essentially my Data Access Object (DAO) for you old schoolers. I will post why Repositories and not DAO in a future blog.
My application context file configures spring with the required setup for my application to run this test. First, the usual name spaces:
Then, we use automatic annotation discovery of out project
Here is wshere we configure the restTemplate to be used for this integration test of our controller
Finally the required configuration for our persistence. Notice we are using JPA configuration here
Finnaly the test code.
We write an integration test for our controller that connects remotely to the deployed application, sends beans mapped from Pojo to json for the call, and then maps back json to Pojo to assert results.
No comments:
Post a Comment