【沉浸式解决问题】java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use

一、问题描述

在spring cloud项目中使用@SpringBootTest注解进行单元测试时,报如下错误
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
在这里插入图片描述


二、原因分析

由于是spring cloud项目,创建好common包模块下的子模块后,并不需求启动服务,删除多余文件时顺手给启动类和测试类都删除了,因为需要用到bean注入,又加上了@SpringBootTest注解,但是@SpringBootTest注解需要配合@SpringBootApplication注解使用,@SpringBootTest会尝试从测试类所在包及其父包中寻找@SpringBootApplication注解的主类。

触发场景:

  1. 测试类与主启动类不在同一包或其子包下。
  2. 项目或模块中没有主启动类(如测试独立模块)。
  3. 未正确配置 @SpringBootTest 的 classes 属性。

三、解决方案

  1. 确保测试类与主启动类在同一包或其子包下
    标准项目结构:
src/
  main/
    java/
      com/example/app/
        Application.java          # 主启动类(@SpringBootApplication)
  test/
    java/
      com/example/app/            # 测试类应在此包或其子包下
        Test.java   # 测试类

测试类默认会扫描主启动类,无需额外配置。

  1. 显式指定主启动类
    如果测试类无法与主类保持包结构一致,在@SpringBootTest中直接指定主类:
@SpringBootTest(classes = Application.class) // 替换为你的主启动类
public class Test {
    // 测试代码
}
  1. 模拟主启动类(适用于无主类的模块)
    如果测试的是一个独立模块(没有主启动类),可创建一个测试专用的配置类,放在test包目录下就可以:
@SpringBootApplication
public class TestApplication {  // 测试专用的伪启动类

}

// 测试类中指定使用此配置,直接把@SpringBootApplication注解加到测试类上也可以
@SpringBootTest(classes = TestApplication.class)
public class DatabaseConfigTest {
    // 测试代码
}
  1. 去掉@SpringBootTest注解
    如果不需要加载完整的 Spring 上下文,只是简单的代码测试,可以去掉@SpringBootTest注解,只用@Test就可以
import org.junit.jupiter.api.Test;

public class Test {

    @Test
    void test1() {
        System.out.println(1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值