springboot项目编写单元测试_springboot单元测试优化及注意事项

本文介绍了如何编写高效的 Spring Boot 单元测试,强调避免使用 Spring 进行测试以减少启动时间,并提供了使用 Mockito 模拟对象以及 AssertJ 提升断言可读性的方法。通过构造器注入、@RequiredArgsConstructor 注解简化代码,以及自定义断言对象提高测试可维护性。
摘要由CSDN通过智能技术生成

写好单元测试是一门技术活,本文就介绍这些优秀的框架,同时介绍编写优秀的 Sping Boot 单元测试所必需的技术细节,

添加依赖

org.springframework.boot

spring-boot-starter-test

test

org.junit.jupiter

junit-jupiter

5.5.2

test

org.projectlombok

lombok

spring-boot-starter-test 默认引入了 Mockito 和AssertJ,对于 Lombok、JUnit5 则需要我们自己手工引入。

不要使用 Spring 进行单元测试

看一下下面的「单元」测试,是用来测试 RegisterUseCase 类的一个方法:

@ExtendWith(SpringExtension.class)

@SpringBootTest

class RegisterUseCaseTest {

@Autowired

private RegisterUseCase registerUseCase;

@Test

void savedUserHasRegistrationDate() {

User user = new User("zaphod", "zaphod@mail.com");

User savedUser = registerUseCase.registerUser(user);

assertThat(savedUser.getRegistrationDate()).isNotNull();

}

}

执行这个测试类,花了大概 4.5 秒的时间,原因仅仅是因为计算机要为它去运行一个空的 Spring 项目。

但是,一个好的单元测试应该是毫秒级的,否则这会影响「test / code / test」的工作方式,这也就是测试驱动开发的思想 (TDD)。即使我们不做 TDD,在编写测试上花了太多时间也会影响我们的开发思路。

其实,上面的测试方法实际执行只花费了几毫秒,剩下的 4.5 秒全部花费在了 @SpringBootRun 上,因为 Spring Boot 需要启动整个 Spring Boot 应用。

也就是说,我们启动整个应用,耗费了大量资源,仅仅是去为了测试一个方法,当我们的应用未来越来越大的时候,那将耗费更久的时间去启动。

所以,为什么不要用 Spring Boot 来做单元测试呢?接下来,本文会讨论如何不用 Spring Boot 来进行单元测试。

创建测试类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值