Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестирование Spring MVC с применением Mockito / 9 сообщений из 9, страница 1 из 1
15.07.2013, 13:40
    #38331312
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
Добрый день,
Хочу написать тесты для SpringMVC контроллера, который тянет информацию из веб-сервиса. Чтобы тесты были проще и работали быстрее, хочу заменить сервис на mock-объект, для создания которого использую Mockito. У меня возникла проблема: не получается подменить реальный сервис mock-объектом. Подменить пытаюсь вот так:

Код: xml
1.
2.
3.
4.
5.
    <!--<bean class="com.springapp.service.SampleService" scope="singleton"/>-->

    <bean class="org.mockito.Mockito" factory-method="mock">
        <constructor-arg index="0" value="com.springapp.service.SampleService"/>
    </bean>



Получаю вот такую ошибку:
Код: java
1.
2.
3.
4.
5.
6.
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.springapp.service.SampleService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:949)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:818)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:730)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)
	... 58 more



В приложенном архиве упрощенный проект, иллюстрирующий ошибку. Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
16.07.2013, 09:55
    #38332266
Nis
Nis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
abc_da,

а как выглядит вас юнит-тест?
...
Рейтинг: 0 / 0
16.07.2013, 12:20
    #38332519
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
Nis, он есть в приложенном файле. Вот:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
package com.springapp.mvc;

import com.springapp.service.SampleService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.context.WebApplicationContext;

import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({"file:src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml", "file:src/main/webapp/WEB-INF/context.xml"})
public class AppTests {
    private MockMvc mockMvc;

    @SuppressWarnings("SpringJavaAutowiringInspection")
    @Autowired
    protected WebApplicationContext wac;

    @Autowired
    private SampleService service;
    
    @Before
    public void setup() {
        this.mockMvc = webAppContextSetup(this.wac).build();
    }

    @Test
    public void simple() throws Exception {
        when(service.service()).thenReturn("mock");
        
        mockMvc.perform(get("/"))
                .andExpect(status().isOk())
                .andExpect(view().name("mock"))
                .andReturn();
    }
}



В гугле много решений на тему внедрения mock-объектов в контекст, но ни одно из них мне не удалось прикрутить. Например, вот это - очень близко, но SpringockitoContextLoader.class не умеет загружать WebApplicationContext и мне не удавалось инициализировать MockMvc. Я, к сожалению, не большой знаток спринга.
...
Рейтинг: 0 / 0
16.07.2013, 15:07
    #38332932
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
abc_da,

Добрый день, получите скорректированную версию.

P.S.
Очень приятно что к топику был приложен Maven проект.
...
Рейтинг: 0 / 0
17.07.2013, 14:30
    #38334163
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
dmitriyche, спасибо большое за помощь!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
20.07.2016, 10:02
    #39276857
ErikI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
А вот я никак не могу получить WebApplicationContext
...
Рейтинг: 0 / 0
20.07.2016, 10:02
    #39276858
ErikI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
Перед тестом прописал
...
Рейтинг: 0 / 0
20.07.2016, 10:03
    #39276859
ErikI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
@ContextConfiguration(locations = {
"/root-context.xml",
"/appServlet/controllers.xml",
"/appServlet/servlet-context.xml"
})
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class
})

P.S.
При нажатии ctrl+enter отправляются сообщения.
...
Рейтинг: 0 / 0
20.07.2016, 10:28
    #39276876
ErikI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестирование Spring MVC с применением Mockito
Отвечаю на свой вопрос.
Оказывается в Spring 4 поменяли название, теперь так
@Resource
private WebApplicationContext wac;

Кроме того надо добавить анотацию к классу @WebAppConfiguration
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестирование Spring MVC с применением Mockito / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]