java 单元测试_「快学springboot」在springboot中写单元测试

往期文章

「Java并发编程」谈谈Java中的内存模型JMM

面试官:说说你知道多少种线程池拒绝策略

为什么不要在MySQL中使用UTF-8编码方式

前言

很多公司都有写单元测试的硬性要求,在提交代码的时候,如果单测通不过或者说单元测试各种覆盖率不达标,会被拒绝合并代码。写单元测试,也是保证代码质量的一种方式。

junit单元测试

相信绝大多数的Java开发者都用过Junit来写单元测试。

引入依赖:

junit junit 4.12

直接在方法上加上@Test注解即可:

202fe3ec7066411798d86cb8c0c90ec1

加了@Test注解,就会有一个运行的图标了。

spring的依赖问题

现在的Java开发,基本上离不开spring了。但是使用spring,写单测的时候就会存在一个依赖注入的问题。

假设有如下一个Service:

@Servicepublic class TestService {​ public String getString() { return "Hello World!"; }​}

在Junit中直接自动装配:

public class JunitTest {​ @Autowired private TestService testService;​ @Test public void test() { System.out.println(testService.getString()); }​}

运行报错:

e0ad66b2f21d41d1a548960734ad384b

springboot写单元测试

在springboot中,解决spring依赖问题,非常的简单。只需要它提供的几个注解即可:

引入依赖:

org.springframework.boot spring-boot-starter-test test

这里引入了一个spring-boot-starter-test依赖,是springboot中写单测所需要的。

在单元测试类上添加@RunWith(SpringRunner.class)、@SpringBootTest注解:

23e02a1a38a44759802f383d237305a3

这时候就可以正常的把spring依赖注入进来了,运行方法,可以看到springboot启动时的输出:

6294bc4e3ccf4af3bc549d0db7ad5643

如果是通过spring initialize创建的springboot项目(本系列第一篇文章有讲解),其实会自动创建一个单元测试类:

93ed49b866164aae8e6829bbab159347

我们在写单元测试的时候,直接继承这个类即可。

单元测试事务回滚

写单元测试,难免需要操作数据库。有时候单元测试的数据库跟开发时候的数据库是同一个,为了不影响数据库的数据,需要在单测完成之后,将操作回滚。这在springboot中也是很容易解决的事情,只需要将单测类继承AbstractTransactionalJUnit4SpringContextTests即可

数据库有数据如下:

bb1b302552bc4328a08c7d1dbda09cd8

单元测试类如下:

c715d64d40774c49be28326e43d6dcbd

测试方法如下:

@Testpublic void deleteAll() { userRepo.deleteAll();}

执行方法后,如果事务不会滚,则会清除user表中的所有数据。

79ad4bc7fc3546149e86cd7afaa5152e

通过结果查看,单测运行没有问题,查看数据库:

4a0383c3543246d59e637b5c955315b8

数据也没有被删除,证明事务已经回滚了。

把继承的AbstractTransactionalJUnit4SpringContextTests类去掉,再次执行deleteAll方法:

7b2d6adeb27b40439cedcb9670ab519a

数据库中的数据已被删除

总结

本文介绍了springboot中写单元测试的方法。其实优雅的写单元测试需要涉及到很多东西,比如mock(mockito、mockmvc等),本文都没有涉及,有兴趣的可以了解下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值