Автор оригинала: mkyong.
Просмотрите следующие примеры JUnit 5, чтобы протестировать веб-приложение Spring 5 MVC.
package com.mkyong.web; import com.mkyong.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-тест
, похоже, что тест Maven не может @autowired
класс WebApplicationContext
.
D:\java-web-project>mvn test com.mkyong.web.TestWelcome.testWelcome() Time elapsed: 0.181 sec <<< FAILURE! java.lang.NullPointerException at com.mkyong.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:2.12.4
, он немного устарел, может не поддерживать интеграцию JUnit 5 + Spring 5.
Чтобы исправить это , обновите до последней версии 2.22.0
org.apache.maven.plugins maven-surefire-plugin 2.22.0
Рекомендации
Оригинал: “https://mkyong.com/maven/maven-test-failed-on-spring-autowired-and-junit-5/”