IntelliJ无法识别同模块src/main/java下同名包的JUnit测试
常见原因及解决办法
Maven测试目录配置异常
默认Maven会自动识别src/test/java下的测试类,但如果当前模块pom自定义了<testSourceDirectory>,或者maven-surefire插件有特殊配置,可能会漏掉同名包下的测试类。试试在当前模块pom里显式声明测试目录:<build> <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory> <testResources> <testResource> <directory>${project.basedir}/src/test/resources</directory> </testResource> </testResources> </build>IDE运行配置的范围限制
看你的运行配置截图,检查有没有设置包过滤规则——比如是不是不小心把com.exlibris.repository.web.mms.publishing包排除了。另外确认运行配置选的是「All Tests」,没开「仅包含选中包的测试」这类限制选项。测试类注解或命名问题
确认ZTest用的是JUnit 5的@Test注解(路径是org.junit.jupiter.api.Test,不是JUnit 4的org.junit.Test),如果是参数化测试这类特殊场景,也要保证相关注解(比如@ParameterizedTest)导入正确。编译或类加载问题
先跑一遍mvn clean compile test-compile,看看主代码或测试代码有没有编译错误——要是同包下的主类编译失败,测试类可能也加载不了。另外检查父pom里的JUnit依赖,别同时混了JUnit 4和5,不然测试引擎可能识别不了JUnit 5的测试类。Maven Surefire插件的过滤规则
查一下父pom或者当前模块pom里的maven-surefire-plugin配置,有没有<excludes>规则把ZTest所在的包给排除了。比如这种配置就会出问题:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <excludes> <exclude>**/ZTest.java</exclude> </excludes> </configuration> </plugin>有这类不合理的排除就直接删掉。
内容的提问来源于stack exchange,提问作者Uriel Zylbermann

