Spring Boot+MongoDB项目测试提示「未找到测试用例」求助
我在运行基于Spring Boot(Java 11)和MongoDB的项目测试时,遇到了「No Tests Were Found(未找到测试用例)」的错误。
我编写了带有测试注解的抽象类MongoContainer:
@SpringBootTest @ActiveProfiles("test") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @ContextConfiguration(initializers = MongoContainer.DockerMongoDataSourceInitializer.class) @Testcontainers @TestInstance(TestInstance.Lifecycle.PER_CLASS) public abstract class MongoContainer { @SpyBean protected DeviceDao deviceDao; @SpyBean protected Datastore datastore; @MockBean protected Connection connection; @MockBean protected SentryClient sentryClient; public static final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.4.0")); static { mongoDBContainer.start(); } public static class DockerMongoDataSourceInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { TestPropertySourceUtils.addInlinedPropertiesToEnvironment( applicationContext, String.format("spring.data.mongodb.uri=mongodb://%s:%s", mongoDBContainer.getContainerIpAddress(), mongoDBContainer.getMappedPort(27017))); } } }
所有测试类均继承MongoContainer,且类名以Test或Tests结尾,示例如下:
public class DeviceServiceTests extends MongoContainer { @Test public void deActivateOldDeviceTest(){ assertThat(true).isEqualTo(true); } }
我是Spring新手,已尝试调整pom.xml但未解决问题,参考相关帖子也无帮助,请问可能的原因是什么?如需更多信息请告知。
可能的原因及解决办法
测试依赖缺失或版本不兼容:检查pom.xml是否引入
spring-boot-starter-test、testcontainers及MongoDB相关测试依赖,确保版本与Spring Boot适配(Java 11推荐用Spring Boot 2.7.x及以上版本)。示例依赖配置:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>mongodb</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>junit-jupiter</artifactId> <scope>test</scope> </dependency> </dependencies>测试类/方法的注解或访问权限问题:
- 确保测试类是
public修饰的,部分测试插件仅扫描public类; - 确认
@Test注解来自org.junit.jupiter.api.Test(JUnit 5),而非JUnit 4的org.junit.Test,混用版本会导致测试无法被识别。
- 确保测试类是
Maven测试插件配置异常:检查
maven-surefire-plugin配置,确保版本适配Java 11,且未自定义错误的扫描规则。默认规则会匹配**/*Test.java和**/*Tests.java,示例配置:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M7</version> </plugin> </plugins> </build>Testcontainers使用方式不规范:静态初始化块启动容器可能引发上下文加载异常,改用Testcontainers推荐的
@Container注解管理容器:// 替换原静态容器定义和静态块 @Container public static final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.4.0"));去掉静态初始化块,Testcontainers会自动处理容器的启停。
IDE测试配置问题:如果在IDE中运行测试,检查:
- 测试类是否位于
src/test/java目录下; - 运行配置是否选择JUnit 5;
- 右键测试类直接选择「Run」触发正确的配置,避免IDE误识别。
- 测试类是否位于
抽象类注解继承问题:尝试在测试子类(如
DeviceServiceTests)上添加@SpringBootTest注解,虽然注解会继承,但部分环境可能需要显式声明。
内容的提问来源于stack exchange,提问作者Aryana Azadi

