SpringBootTest注解测试service层

背景

使用@SpringBootTest注解对一个service进行单元测试,启动单元测试时会启动项目的上下文。相当于运行项目启动类后,再调用service的接口。
依赖:spring-boot-starter-test

生成单元测试类

选择要测试的serviceImpl,右键生成测试类,选择junit5
在这里插入图片描述
生成的测试类如下:

class UserPayServiceImplTest {

    @Test
    void pay() {
    }
}

加入@SpringBootTest

MyframeApplication对应项目的启动类。如果不写这个的话,下面的service就无法自动注入。
测试类启动时会先启动项目,再执行测试方法。也就是说测试类的测试依赖项目启动环境。

@SpringBootTest(
        /*MyframeApplication对应项目的启动类。如果不写这个的话,下面的service就无法自动注入。
         测试类启动时会先启动项目,再执行测试方法。也就是说测试类的测试依赖项目启动环境。*/
        classes = MyframeApplication.class,  
        /*因为测试的是service,禁用web以加快项目启动速度*/
        webEnvironment = WebEnvironment.NONE
)
class UserPayServiceImplTest {

    @Autowired
    private UserPayService userPayService; //自动注入要测试的service
    @Test
    void pay() {
        userPayService.pay(new BigDecimal(300));// 测试接口方法
    }
}

执行测试:
在这里插入图片描述
成功通过测试类进入了实际代码的断点。

`@SpringBootTest` 是 Spring Boot 自带的一个测试注解,用于对完整的 Spring 应用上下文进行测试,包括自动配置、依赖注入等。如果你在使用它做服务Service)的测试时发现 Service 类并没有被扫描到,可能是以下几个原因: 1. **未包含在 Spring 容器中**:检查你的 Service 是否添加了 `@Component` 或 `@Service` 注解,这会让 Spring 扫描并自动管理该组件。 ```java @Service public class MyService { //... } ``` 2. **扫描路径配置错误**:如果你的 Service 分别放在不同的包下,需要确保你在 `@SpringBootTest` 上加上相应的 basePackages 或 componentsScan 属性。 ```java @SpringBootTest(basePackages = {"com.example.service"}) public class MyServiceTest { //... } ``` 3. **懒加载(Lazy Initialization)**:默认情况下,Spring 会延迟创建 Bean,直到它们真的被请求。如果你的 Service 是懒加载的,你需要在测试方法中手动初始化。 ```java @Autowired private MyService myService; @BeforeEach public void setUp() { //这里手动初始化 myService myService.init(); } ``` 4. **测试类不是 @Configuration 或 @ContextConfiguration 的后代**:`@SpringBootTest` 只能用于测试类,而不是测试方法。确保你的测试类是基于这些注解创建的。 如果你遇到问题,可以尝试运行测试看看是否有相关的日志信息,这有助于定位问题。如果需要帮助,记得附上相关的代码片段以便更好地分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值