单元测试设计原则

为了确保代码质量,本文介绍了单元测试的3R原则:Responsible(责任明确)、Reliable(可靠可信)、Repeative(可重复)。开发者应在完成代码后立即编写测试,并在相同模块内进行。为确保测试可靠,应减少mock使用,采用递进集成测试各层代码。为实现测试可重复,需消除case间的依赖,包括数据库和第三方服务。同时,文章提出了使用junit断言和处理多默认执行类的方法。
摘要由CSDN通过智能技术生成

背景

为了提高开发人员的代码质量,编写高质量的单元测试,要遵守3R(Responsible, Reliable, Repeative)原则,具体含义如下:

  • Responsible: 谁开发谁负责测试,在哪里开发就在哪里测试。
  • Reliable: 测试case要可靠,并且是值得信赖的,对于底层的任何改动都要能够及时感知。
  • Repeative: 所有单元测试用例都要能够重复运行。能够重复运行就能够进行回归测试、覆盖率统计等等。

方案

  1. 如何做到Responsible?
    开发在完成一个方法,或者一个类之后,就要及时得进行单元测试;不能在对应方法或类的调用处进行测试,比如两个模块A、B,A是基础模块,为模块B提供服务,那么所有A模块的单元测试case都应该在A模块的内部进行测试。
  2. 如何做到Reliable?
    为了使得测试用例尽量可靠,就要减少mock的使用(对于第三方的调用可以使用mock),对每层代码的测试都要完全依赖于下层,不能mock下层逻辑。因此引入递进集成的概念,比如测试DAO时要连接真实的数据库,测试Service时要使用真实的DAO、DB, 测试Controller层的代码,要使用真实的Service、DAO、DB,以此类推。这样就可以最大限度的提高case的可靠性。
  3. 如何做到Repeative?
    必须要做到case间完全解耦,没有任何的依赖,这包括和数据库的依赖以及第三方的依赖。case解耦可以通过准备测试数据、mock第三方调用来解决。
  4. 如何进行自动断言?
    可以使用junit的断言,或者hamcrest提供的assertThat断言。
  5. 如何同时使用多个junit默认执行类?比如同时使用@RunWith(DataProviderRunner.class)和@RunWith(SpringJUnit4ClassRunner.class)。
    junit类是不能同时添加多个默认执行类的,此时可以通过编程,将默认执行类所做的工作放在@Before方法来完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值