是否可以使用 maven 使用 junit 5 运行 spring boot 测试?我正在使用 spring boot 2.0.0.M3、junit 5.0.0-M6、maven 3.5.0。其他 junit5 测试(没有弹簧上下文)有效。
有一个简单的控制器:
@Controller
public class HomeController {
@GetMapping("/")
String home() {
return "home";
}
}
并测试:
@ExtendWith(SpringExtension.class)
@WebMvcTest(HomeController.class)
@Import(SecurityConfig.class)
class HomeControllerTest {
@Autowired
private MockMvc mvc;
@Test
void shouldReturnHomeTemplate() throws Exception {
this.mvc.perform(get("/").accept(MediaType.TEXT_HTML))
.andExpect(status().isOk())
.andExpect(content().string(startsWith("<!DOCTYPE html>")));
}
}
当我使用intellij运行它时一切正常,但maven构建以失败告终:
[警告] 分叉 JVM 1 中的标准输入流损坏。请参阅转储文件 somePath/target/surefire-reports/2017-07-28T13-50-15_071-jvmRun1.dumpstream
--debug 标志显示:
java.lang.OutOfMemoryError:Java 堆空间
在里面2017-07-28T13-50-15_071-jvmRun1.dumpstream
我可以找到大约 100 个相同的异常(每个 spring 日志一个):
分叉 JVM 1 中的标准输入流损坏。流“13:50:15.914 [main] DEBUG org.springframework.test.context.BootstrapUtils - 从类 [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate] 实例化 CacheAwareContextLoaderDelegate”。java.lang.IllegalArgumentException:流标准输入已损坏。命令“13:50:15.914 [main] DEBUG org.springframework.test.context.BootstrapUtils - 从类 [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate] 实例化 CacheAwareContextLoaderDelegate”中的第三个字符后的预期逗号。在 org.apache.maven.plugin.surefire.booterclient.output.ForkClient$OperationalData.(ForkClient.java:469) 在 org.apache.maven.plugin。
Maven 万能插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.0-M6</version>
</dependency>
</dependencies>
</plugin>