软件工程综合实践专题 个人博客作业 软件测试 单元测试 JUnit

关于JUnit:

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个Java语言的单元测试框架,也是一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

单元测试:

单元测试,是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。其中,单元测试再往上就是集成测试。

再在这里,由于我们的代码部分还未完成,我们先使用网上找的一段代码来进行演示

 1 package test;
 2 import java.util.Scanner; 
 3 public class Main{
 4     boolean enough;
 5     double charge;
 6     int discount;
 7 
 8     Main(double cos,double num,double paid) {
 9         //System.out.println("收银台收款程序2.0"); 
10         Scanner scan=new Scanner(System.in);
11         //System.out.println("请输入商品单价:");
12         double cost=cos;
13         //System.out.println("请输入商品数量:"); 
14         double number=num;  
15         double money=cost*number;
16         if (money<500){
17             //System.out.println("未满500不打折");
18             discount=10;
19         }
20         else if(money>=500&&money<1000){ 
21             money=money*0.8;
22             //System.out.println("满500打8折");
23             discount=8;
24         }
25         else if(money>=1000){
26             money=money*0.6;
27             //System.out.println("满1000打6折");
28             discount=6;
29         } 
30         //System.out.println("应付金额:"+money);
31         //System.out.println("实付金额:"); 
32         double net=paid;
33         double change=net-money;
34         if(net>=money){
35             this.enough = true;
36             this.charge = change;
37             //System.out.println("找零"+change); 
38         }
39         else if(net<money){
40             double lack=money-net;
41             this.enough = false;
42             this.charge = lack;
43             //System.out.println("您给的钱少了,还差"+lack+"元。");
44         }
45     }
46     public boolean getEnough() {
47         return enough;
48     }
49     public double getCharge() {
50 return charge; 51 } 52 public int getDiscount() { 53 return discount; 54 } 55 }

这是一个用Java语言写的类,我们将使用JUnit框架对其进行单元测试。

首先我们先来看一下测试的脚本代码:

package test;

import org.junit.Assert;
import org.junit.Test;

public class MainTest {
    @Test
    //测试 getCharge()方法
    public void testdiscount1(){
        Main test = new Main(10,3,40);
        Assert.assertEquals(test.getDiscount(),10);
    }
    
    @Test
    public void testdiscount2(){
        Main test = new Main(50,10,40);
        Assert.assertEquals(test.getDiscount(),8);
    }
    
    @Test
    public void testdiscount3(){
        Main test = new Main(120,10,40);
        Assert.assertEquals(test.getDiscount(),6);
    }
    
    @Test
    //测试 getEnough()方法
    public void testEnough(){
        Main test = new Main(10,3,20);
        Assert.assertEquals(test.getEnough(), false);
    }
     
    @Test
    //测试 getCharge()方法
    public void testCharge(){
        Main test = new Main(10,3,40);
        Assert.assertEquals((int)test.getCharge(),10);
    }
}

在界面中我们看到的应该是这个样子的。我们先来看一下测试脚本,首先是要引入org.junit.Assert这样的一个包,然后再在里面编写测试代码。在这段代码里我们可以看到,在每个测试方法的前一行都有一个“@Test”做标识符,告诉这个框架我在这里写的是测试方法。如果不写这个@Test的话,在JUnit执行自动测试的时候则不会执行这个方法里面的测试内容。在下面我们先来演示一下,鼠标右键点击这个.java文件,然后让他Run As Junit Test,我们就可以在Eclipse左边得到以下结果:

 

我们可以看到,5个测试用例,全部被执行了一遍。这个时候,我们删掉一个@Test标签试一下:

我们在这里把testEnough这个方法的标签注释掉,然后再运行一下:

所以,在这里,我们就会发现,在测试结果里,并没有出现testEnough这个方法的测试结果。所以,由此可以看出,这个标签是不能省略的。

既然讲到了JUnit,那么就顺便再提一下Coverage覆盖测试吧

在eclipse中点击工具栏的 help--install new software,然后在选项中找到Coverage选项,然后点击Add,之后一路Next就行

然后右键点击测试类就会发现,你的菜单栏里多了一个Coverage As,这个就是覆盖率测试。我们Run一下试试看:

 

这里我们可以看到我们的测试脚本代码里有许多的绿色底色,这个代表着这个测试方法被使用了。现在我们再把切换到Main函数里去看看:

 

我们可以看到,还有出现了黄色的底色,这个表示被覆盖到了的测试分支。

然后在最底部,我们可以看到有一个Coverage的数据,这个表示的是测试脚本的覆盖率。当然,这里我们所有的分支都测试到了,所以覆盖率为100%。

我们现在再注释掉一个再试试看:

现在我们可以看到这些红色的底色,这就代表这一部分没有被测试到,所以我们的测试覆盖率也不再是100%。

以上就是关于JUnit单元测试和Coverage测试覆盖率的内容

转载于:https://www.cnblogs.com/JeremySW/p/10979825.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值