Тест Maven не прошел в Spring @Autowired и jUnit 5
Просмотрите следующие примеры jUnit 5 для тестирования веб-приложения Spring 5 MVC.
TestWelcome.java
package com.example.web; import com.example.web.config.SpringConfig; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @ExtendWith(SpringExtension.class) @WebAppConfiguration @ContextConfiguration(classes = SpringConfig.class) public class TestWelcome { private MockMvc mockMvc; @Autowired private WebApplicationContext webAppContext; @BeforeEach public void setup() { mockMvc = MockMvcBuilders.webAppContextSetup(webAppContext).build(); } @Test public void testWelcome() throws Exception { this.mockMvc.perform( get("/")) .andDo(print()) .andExpect(status().isOk()) .andExpect(view().name("index")) .andExpect(forwardedUrl("/WEB-INF/views/index.jsp")) .andExpect(model().attribute("msg", "Hello World")); } @Test public void testAbc() { assertEquals(2, 1 + 1); } }
Протестировано нормально с IntelliJ IDEA и Eclipse. Но не удалось выполнить команду Maven -mvn test
, похоже, тест Maven не может@Autowired
классWebApplicationContext
.
D:\java-web-project>mvn test com.example.web.TestWelcome.testWelcome() Time elapsed: 0.181 sec <<< FAILURE! java.lang.NullPointerException at com.example.web.TestWelcome.testWelcome(TestWelcome.java:40) [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.326 s [INFO] Finished at: 2018-10-05T16:39:18+08:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
Решение
В приведенной выше консоли мы заметили, что Maven используетmaven-surefire-plugin:2.12.4
, он немного устарел, может не поддерживать интеграцию jUnit 5 + Spring 5.
To fix it, обновите до последней версии 2.22.0
pom.xml
org.apache.maven.plugins maven-surefire-plugin 2.22.0