Test your Controller's ModelAttribute methods.

20 January, 2011.
Under: assertion

I was about to write some unit tests around my Spring’s controller classes and also i wanted to write the test using MockHttpRequest and MockHttpResponse.

My controller had a method to which i was using ModelAttribute as one of the parameter. I just want to simulate the same scenario in my Unit Tests.

Unfortunately i could not see any methods in MockHttpRequest to help me with this. So i had to take a simple different approach as an workaround for this.

My Controller code looks similar to this:

@RequestMapping(value = "/register")
public class MyController {
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView save(@ModelAttribute User user) {
        //Code to save the User object
        return new ModelAndView();

My Unit Tests:

public class MyControllerTest {
    MockHttpServletResponse response;
    MockHttpServletRequest request;
    AnnotationMethodHandlerAdapter handler;

    public final void init() {
        response = new MockHttpServletResponse();
        request = new MockHttpServletRequest();
        handler = new AnnotationMethodHandlerAdapter();

    public void shouldTestSaveUser() {
        final User mockUser = new UserTestBuilder().withName("John").build();

        MyController myController = new MyController() {
            public User mockModel() {
                return user;
        ModelAndView model = handler.handle(request, response, myController);


Whenever a method in a controller is annotated with @ModelAttribute , it will be invoked for every request made to that controller. So while creating the mycontroller object i am overriding a sample method which has this annotation and returns a User object as a ModelAttribute.

Share Tweet
comments powered by Disqus