Spring @AutowiredとjUnit 5でMavenテストが失敗しました
次のjUnit 5の例を見て、Spring 5 MVC Webアプリケーションをテストしてください。
TestWelcome.java
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でokをテストしました。しかし、Mavenのコマンドで失敗しました。
mvn test`は、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-plugin:2.12.4`を使用していることに気付きました。少し古いですが、jUnit 5 Spring 5の統合をサポートしていない可能性があります。
pom.xml
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.0</version> </plugin> </plugins> </build>
参考文献
シュアファイアプラグイン – JUnit 5プラットフォームの使用]。リンク://maven/maven-list-all-the-projects-plugins/[Maven – すべての
プロジェクトのプラグイン]