SpringBoot的JunitTest测试中,Service无法注入;Junit4和Junit5的区别

本文详细介绍了在SpringBoot项目中如何正确配置Junit4或Junit5来实现Service层的注入,避免出现null值的问题。针对不同版本的Junit提供了具体的注解使用指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot中,要使Service可以注入,需要添加注解@SpringBootTest和Junit的注解

但要清楚知道你使用的是Junit4还是Junit5

Junit5加@ExtendWith(SpringExtension.class)
Junit4加@RunWith(SpringRunner.class)
选其中一个,否则service无法注入,值为null!!

@RunWith(SpringRunner.class)        //Junit4 
@ExtendWith(SpringExtension.class)  //Junit5
@SpringBootTest
class UserServiceImplTest {
    @Autowired
    private UserService userService;

	@Test
    void loginUser() {
       ....
    }
}
在 Spring Boot 项目中对 Service 层进行单元测试,通常使用 `spring-boot-starter-test` 提供的依赖,其中包括 JUnit、AssertJ、Hamcrest 等测试库。为了实现对 Service 层的测试,需要结合 Spring 的测试支持,特别是 `@SpringBootTest` 或 `@ContextConfiguration` 来加载 Spring 应用上下文。 以下是一个完整的示例,展示如何使用 JUnitService 层进行单元测试: ### Service测试示例 假设有一个简单的 `UserService`,其依赖于 `UserRepository`,并提供一个获取用户信息的方法。 ```java @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } } ``` 对应的测试可以如下编写: ```java @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @MockBean private UserRepository userRepository; @Test public void testGetUserById() { User mockUser = new User(1L, "John Doe"); when(userRepository.findById(1L)).thenReturn(Optional.of(mockUser)); User result = userService.getUserById(1L); assertNotNull(result); assertEquals("John Doe", result.getName()); } } ``` ### 关键注解说明 - `@SpringBootTest`:启动完整的 Spring 应用上下文,适合集成测试[^1]。 - `@MockBean`:用于创建注入模拟对象,避免真实依赖的调用。 - `@Autowired`:自动注入测试的服务实例。 - `@Test`:JUnit 注解,标记测试方法。 ### Maven 依赖配置 确保 `pom.xml` 中包含以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> ``` ### 测试执行与验证 运行测试时,Spring Boot 会加载上下文并初始化模拟对象。通过 `when(...).thenReturn(...)` 设置模拟行为,然后调用服务方法并验证返回值是否符合预期。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值