深入理解 Spring 单元测试:@SpringBootTest、@Value 注入、@MockBean 使用实战与陷阱

Spring 是目前最流行的 Java 企业级开发框架之一,而良好的单元测试是高质量代码的重要保障。尤其在实际开发中,我们经常会碰到诸如 @Autowired 空指针、Nacos 配置项 @Value 注入失败、Mapper 测试困难等问题。

本文将围绕 Spring 单元测试的完整体系,结合以下关键要点进行讲解:

  • @SpringBootTest 的作用与最佳实践
  • @Autowired 注入空指针的常见原因与解决
  • @Value 注入 Nacos 配置失败的处理方式
  • Mapper 接口的测试注意事项
  • @MockBean@Mock 的区别与使用场景

一、@SpringBootTest:让测试运行在完整 Spring 容器中

✅ 作用

@SpringBootTest 是 Spring Boot 提供的集成测试注解,启动完整的 Spring 容器,可自动加载配置文件、注入 Bean、连接数据库等。

@SpringBootTest
class UserServiceTest {
   
    @Autowired
    private UserService userService;

    @Test
    void testSave() {
   
        userService.save(...);
    }
}

@SpringBootTest注解支持通过 properties 属性传递内联配置,这在测试时临时覆盖@Value 注入的配置项非常实用。你可以在测试类上写:

@SpringBootTest(properties = {
   
  "key1=value1","key2=value2"
})

这相当于在测试环境下动态注入配置项,优先级高于 application.properties/application.yml。此处的配置通常与@Value 注解搭配使用。
假设在你的代码中有这样的字段


@Value("${key3}")
private List<String> valueList;

在测试类中,可以这样注入对应值:

@SpringBootTest(properties

你可能感兴趣的:(spring,spring,单元测试)