1.前言
众所周知,测试对于一个工程而言是至关重要的,而现在绝大多数团队都配有专门的测试人员来使用各种工具进行专业的测试,这里介绍的Junit的更多是作为开发同学在开发过程或最后提供自测的工具,使用起来非常方便,并且可以提供出测试覆盖率,以及具体没有覆盖的代码。
下面还是使用Idea做为演示IDE,使用Eclipse或者其他IDE的同学请自行搜索搭建方式,应该都是大同小异。
这里网上有很多详细的使用方法,是作为Junit框架来讲解的,看起来是更适合于测试同学,对我来说,只希望使用Junit来做简单的关键方法的自测,所以比较随意。
环境准备
依赖:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
2.用法
假如你想测试Account类中扣款方法pay()有没有正常执行。
Account:
public class Account { private int balance; public Boolean pay(int money){ if(balance >= money) { balance -= money; return true; }else return false; } public void charge(int money){ this.balance += money; } public int getBalance() { return balance; } }
在测试路径下(建议将测试类单独放在测试的包路径下)新建一个测试类,测试类可以这么写:
public class AccountTest { private Account account = new Account(); //@Test就是Junit测试的注解 @Test public void testAccount(){ //Assert.assertEquals前面为期望值,后面为实际值,用来验证数据是否符合预期 Assert.assertEquals(0,account.getBalance()); account.charge(100); Assert.assertEquals(100,account.getBalance()); Assert.assertEquals(true,account.pay(20)); Assert.assertEquals(80,account.getBalance()); Assert.assertEquals(false,account.pay(100)); } }
然后不需要main函数可以直接运行:
如果是绿色没有报错就代表测试通过
3.批量测试以及测试覆盖率
Idea右上角的Edit Configurations
新建一个Junit测试,Test kind可以选择类,还是整个包路径,我这里选了整个包,然后选好工程。
然后在Code Coverager选项卡,。Tracin模式会增加消耗,但测量会更精确。然后添加测试类想要覆盖的被测试代码路径
都配置好后,通过右上角的Run With Coverage来运行
结果如下:
右边会出现测试覆盖率的结果,类左边的颜色代表了测试结果,没有被测试覆盖到的代码都将高亮显示为红色,覆盖的代码颜色则是绿色,如果一些代码是只覆盖部分,那没将显示为黄色。
4.总结
通过自动化Junit单元测试,可以让开发更好的完成自测,提高代码质量,也让项目流程推进更加清晰快速。
5.测试覆盖率计算
覆盖率概念
覆盖率是用来度量测试完整性的一个手段,是测试技术有效性的一个度量。分为:白盒覆盖、灰盒覆盖和黑盒覆盖;测试用例设计不能一味追求覆盖率,因为测试成本随覆盖率的增加而增加。
覆盖率=(至少被执行一次的item数)/item的总数