SpringBoot 项目初始化
-
使用 IDEA 开发者工具内置的 SpringBoot 脚手架初步搭建基本没问题
但是这里也有一个小坑点:如果你使用的是较新的 SpringBoot 搭建,它内置的是 Junit5(较新版本),但 IDEA 内置的 测试执行器可能无法兼容新版本的 Junit,可能会出现以下报错:Exception in thread "main" java.lang.NoSuchMethodError: 'java.lang.String org.junit.platform.engine.discovery.MethodSelector.getMethodParameterTypes()'
at com.intellij.junit5.JUnit5TestRunnerUtil.loadMethodByReflection(JUnit5TestRunnerUtil.java:127)
at com.intellij.junit5.JUnit5TestRunnerUtil.buildRequest(JUnit5TestRunnerUtil.java:102)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:43)
at com.intellij.rt.junit.IdeaTestRunnerRepeater1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
解决办法:降级 SpringBoot 版本或者使用 Junit4。
- 引入 Junit4 依赖,直接去 Maven 中心仓库找:http://mvnrepository.com/
- 单元测试的一些注意点
-- 在 SpringBoot 启动类上添加 @MapperScan,指定 Mapper 所在的包
-- 包路径与主启动类相同(或在其子包下),这样 Spring 能自动扫描到配置
-- 不在同一根包下,需在 @SpringBootTest 下指定 classes 属性@SpringBootTest(classes = PairMateBackendApplication.class)
-- 在类头上需添加@RunWith(SpringRunner.class),因为 Junit4 默认不会启动 Spring 容器,添加了这一行后才会去加载 Spring 上下文
目前我还是比较喜欢用 Junit4,兼容会比较好。如果使用 Junit5,启动 Spring 容器要更改为: @ExtendWith(SpringExtension.class) 语句。