Статьи

Spring MVC Controller JUnit Тестирование

JUnit тестирование Spring MVC контроллеров не простая задача . Но недавно новый проект (который скоро будет включен в Spring) предлагает новые инструменты для облегчения этого. Этот пост иллюстрирует, как протестировать простой контроллер с помощью тестов JUnit.

Этот код является разновидностью кода, используемого в JUnit Testing Spring Service и DAO (с базой данных в памяти) . Он доступен от Gihut в каталоге Spring-MVC-JUnit-Testing.

Тестовые классы конфигурации

Они идентичны тем, которые требуются для тестирования службы и DAO .

контроллер

Наш контроллер:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Controller
public class MyController {
 
    @Autowired
    private MyService myService;
 
    @RequestMapping(value = '/')
    public String home(Model model) {
 
        return 'index';
 
    }
 
    @RequestMapping(value = '/roundtrip')
    public String persistenceStatus(Model model) {
 
        MilliTimeItem retr = myService.createAndRetrieve();
        model.addAttribute('RoundTrip', retr);
 
        return 'roundtrip';
 
    }
 
}


Тестирование контроллера

Следующее создает экземпляр MockMvc для тестирования симулированных пользовательских запросов:

01
02
03
04
05
06
07
08
09
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
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={ JpaTestConfig.class, TestConfig.class })
public class MyControllerTest {
 
    private MockMvc mockMvc;
 
    @Before
    public void setup() {
 
        mockMvc = MockMvcBuilders
            .annotationConfigSetup(JpaTestConfig.class, TestConfig.class)
            .build();
 
    }
 
    @Test
    public void testHome() throws Exception {
 
        mockMvc.perform(get('/'))
            .andExpect(status().isOk())
            .andExpect(forwardedUrl('WEB-INF/pages/index.jsp'));
 
    }
 
    @Test
    public void testPersistenceStatus() throws Exception {
 
        mockMvc.perform(get('/roundtrip'))
            .andExpect(status().isOk())
            .andExpect(forwardedUrl('WEB-INF/pages/roundtrip.jsp'))
            .andExpect(model().attributeExists('RoundTrip'));
 
    }
 
}

Запрос / проверяет возвращенное состояние и сопоставление URL-адреса со страницей JSP. Запрос / roundtrip гарантирует, что возвращаемая модель содержит атрибут Roundtrip.

зависимости

Тестовый артефакт Spring MVC пока недоступен в центральном репозитории maven. Его следует получить из другого хранилища:

1
2
3
4
5
6
<repositories>
    <repository>
        <id>spring.test-mvc</id>
            <url>http://repo.springsource.org/libs-milestone</url>
        </repository>
    </repositories>

Требуемые зависимости:

01
02
03
04
05
06
07
08
09
10
11
12
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test-mvc</artifactId>
    <version>1.0.0.M1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

Больше Spring связанных постов здесь .

Ссылка: Spring MVC Controller JUnit Тестирование от нашего партнера JCG Джерома Версринга в блоге Технических примечаний .