在springboot中写单元测试

发表于:2019-6-19 13:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:happyjava    来源:掘金

  前言
  很多公司都有写单元测试的硬性要求,在提交代码的时候,如果单测通不过或者说单元测试各种覆盖率不达标,会被拒绝合并代码。写单元测试,也是保证代码质量的一种方式。
  junit单元测试
  相信绝大多数的Java开发者都用过Junit来写单元测试。
  引入依赖:
   <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  </dependency>
  直接在方法上加上@Test注解即可:
  加了@Test注解,就会有一个运行的图标了。
  spring的依赖问题
  现在的Java开发,基本上离不开spring了。但是使用spring,写单测的时候就会存在一个依赖注入的问题。
  假设有如下一个Service:
  @Service
  public 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());
  }
  }
  运行报错:
  springboot写单元测试
  在springboot中,解决spring依赖问题,非常的简单。只需要它提供的几个注解即可:
  引入依赖:
   <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
  </dependency>
  这里引入了一个spring-boot-starter-test依赖,是springboot中写单测所需要的。
  在单元测试类上添加@RunWith(SpringRunner.class)、@SpringBootTest注解:
  这时候就可以正常的把spring依赖注入进来了,运行方法,可以看到springboot启动时的输出:
  如果是通过spring initialize创建的springboot项目(本系列第一篇文章有讲解),其实会自动创建一个单元测试类:
  我们在写单元测试的时候,直接继承这个类即可。
  单元测试事务回滚
  写单元测试,难免需要操作数据库。有时候单元测试的数据库跟开发时候的数据库是同一个,为了不影响数据库的数据,需要在单测完成之后,将操作回滚。这在springboot中也是很容易解决的事情,只需要将单测类继承AbstractTransactionalJUnit4SpringContextTests即可
  数据库有数据如下:
  单元测试类如下:
  测试方法如下:
   @Test
  public void deleteAll() {
  userRepo.deleteAll();
  }
   执行方法后,如果事务不会滚,则会清除user表中的所有数据。
  通过结果查看,单测运行没有问题,查看数据库:
  数据也没有被删除,证明事务已经回滚了。
  把继承的AbstractTransactionalJUnit4SpringContextTests类去掉,再次执行deleteAll方法:
  数据库中的数据已被删除
  总结
  本文介绍了springboot中写单元测试的方法。其实优雅的写单元测试需要涉及到很多东西,比如mock(mockito、mockmvc等),本文都没有涉及,有兴趣的可以了解下。

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号