Весенний 3.0 джунит-тест DispatcherServlet - PullRequest
4 голосов
/ 20 октября 2011

Я пытаюсь протестировать свое приложение с помощью junit.

Поэтому я настроил следующий класс:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/META-INF/spring/applicationContext-test.xml" )
@TransactionConfiguration
@Transactional
public class DispatcherServletTest extends AbstractJUnit4SpringContextTests {

    private MockHttpServletRequest request;
    private MockHttpServletResponse response;

    private DispatcherServlet dispatcher;

    @Before
    public void setUp() throws Exception {
            request = new MockHttpServletRequest();
            response = new MockHttpServletResponse();

            MockServletConfig config = new MockServletConfig("myapp");
            config.addInitParameter("contextConfigLocation","classpath*:webmvc-config.xml");

            dispatcher = new DispatcherServlet();
            dispatcher.init(config);
    }
    //test cases

}

Итак, проблема в том, чтоПохоже, что мой сервлет-диспетчер не может отправлять запросы ни одному из моих контроллеров.

Я думаю, что есть что-то с конфигурацией - contextConfigurationLocation.Похоже, он может найти файл (в противном случае он выдаст исключение), но не загружает никакую конфигурацию

Регистратор говорит:

org.springframework.web.servlet.PageNotFound -Не найдено сопоставления для HTTP-запроса с URI [http://localhost:8080/myapp/abc]

Но я абсолютно не знаю, что не так ...

Буду признателен за любую помощь!

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Мины работают нормально, попробуйте следующие настройки.

  1. если вы используете Junit4, нет необходимости расширять свой тестовый класс, бегун junit должен сделать трюк
  2. Загрузите контекстную конфигурацию через classpath и убедитесь, что она доступна из тестового classpath

    @ ContextConfiguration (места = { "Путь к классам: ApplicationContext-test.xml"})

  3. , затем просто протестируйте аннотированные контроллеры. Я делаю это так:


    @Test
    @Transactional
    public void testAnnotatedListUser() throws Exception {
        MockHttpServletRequest request = new MockHttpServletRequest();
        MockHttpServletResponse response = new MockHttpServletResponse();
        AnnotationMethodHandlerAdapter handlerAdpt = new AnnotationMethodHandlerAdapter();
        request.setRequestURI("/you/URIhere");
        ModelAndView mav = handlerAdpt.handle(request, response, this.controller);
        assertEquals("Incorrect view name returned", "myexpectedviewname", mav.getViewName());
    }

0 голосов
/ 09 ноября 2011

В моем вопросе есть несколько проблем:

Сначала невозможно расширить AbstractJUnit4SpringContextTests и использовать @RunWith (...), потому что это одно и то же.

Во-вторых, вам не следует использовать dispatcherServlert, а обработчик, определив обработчик в вашем application.xml и автоматически связав его в тестовом примере с помощью обработчика @Autowire private Handler ...

Тогда все должно работать нормально!

...