Der Maven-Test ist auf Spring @Autowired und jUnit 5 fehlgeschlagen
Überprüfen Sie die folgenden jUnit 5-Beispiele, um eine Spring 5 MVC-Webanwendung zu testen.
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); } }
OK getestet mit IntelliJ IDEA und Eclipse. Aber mit dem Maven-Befehlmvn test
fehlgeschlagen. Es sieht so aus, als ob der Maven-Test nicht in der Lage ist,@Autowired
derWebApplicationContext
-Klasse zu entsprechen.
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
Lösung
In der obigen Konsole haben wir festgestellt, dass Mavenmaven-surefire-plugin:2.12.4
verwendet. Es ist etwas veraltet und unterstützt möglicherweise nicht die Integration von jUnit 5 + Spring 5.
To fix it, Update auf die neueste Version 2.22.0
pom.xml
org.apache.maven.plugins maven-surefire-plugin 2.22.0