You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+MongoDB项目测试提示「未找到测试用例」求助

问题:运行Spring Boot(Java 11 + 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:04:59