лучший способ интеграционного теста Spring MVC

У меня есть проект Spring MVC 3.2, который я хотел бы выполнить для модульных и интеграционных тестов. Проблема в том, что все зависимости, которые у меня есть, делают тестирование чрезвычайно сложным даже с помощью Sprint-test.

У меня есть такой контроллер:

@Controller
@RequestMapping( "/" )
public class HomeController {

    @Autowired
    MenuService menuService;  // will return JSON

    @Autowired
    OfficeService officeService; 


    @RequestMapping( method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE )
    @ResponseBody
    public AuthenticatedUser rootCall( HttpServletRequest request ) {
        AuthenticatedUser authentic = new AuthenticatedUser();

        Office office = officeService.findByURL(request.getServerName());
        authentic.setOffice(office);

        // set the user role to authorized so they can navigate the site
        menuService.updateVisitorWithMenu(authentic);
        return returnValue;
     }

Это вернет объект JSON. Я хотел бы проверить, что этот вызов возвращает 200 и правильный объект с готовым JSON. Однако у меня есть много других классов, вызываемых этими классами @Autowired, и даже если я издеваюсь над ними следующим образом:

 @Bean public MenuRepository menuRepository() {  
      return Mockito.mock(MenuRepository.class); 
 }

это создает много издевательских классов. Вот как я пытаюсь это проверить:

 @RunWith( SpringJUnit4ClassRunner.class )
 @ContextConfiguration( classes = JpaTestConfig.class )
 @WebAppConfiguration
 public class HomeControllerTest {

     private EmbeddedDatabase database;

    @Resource
    private WebApplicationContext webApplicationContext;

    @Autowired
    OfficeService officeService;

    private MockMvc mockMvc;

    @Test
    public void testRoot() throws Exception {  mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
      .andExpect(content().contentType(IntegrationTestUtil.APPLICATION_JSON_UTF8))
            .andExpect(content().string(<I would like canned data here>));

}

Я могу настроить встроенную базу данных H2 и заполнить ее, но мне интересно, действительно ли это проверка этого контроллера или приложения? Может ли кто-нибудь порекомендовать лучшие подходы к этому интеграционному тесту? Как писать модульные тесты для контроллеров?

Спасибо!


person sonoerin    schedule 30.04.2013    source источник


Ответы (1)


Ознакомьтесь с проектом spring show case и взгляните на тестовые случаи контроллера, которые вы сможете понять и увидеть стандартный способ тестирования контроллеров. MappingControllerTests.java содержит несколько тестов контроллера на основе json.

person apurvc    schedule 30.04.2013