【轻松玩转 JUnit 单元测试】

前言:

JUnit 是 Java 中最流行的单元测试框架之一。单元测试的目的是验证代码中的各个最小单元(如类或方法)是否按照预期工作。JUnit 帮助开发人员确保他们的代码正确、可靠,并且在代码变更时不会意外引入新问题。

引入

【1】软件测试的目的:
软件测试的目的是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 
【2】测试分类:
(1)黑盒测试:
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试。
(2)白盒测试:---》Junit属于白盒测试
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试,通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试。

没有Junit的情况下如何进行测试

在没有使用Junit的时候,缺点:
(1)测试一定走main方法,是程序的入口,main方法的格式必须不能写错
(2)要是在同一个main方法中测试的话,那么不需要测试的东西必须注释掉
(3)测试逻辑如果分开的话,需要定义多个测试类,麻烦
(4)业务逻辑和测试代码,都混淆了。

package com.themyth.calculator;
/**
 * @Auther: themyth
 */
public class Calculator {
    //加法:
    public int add(int a , int b){
        return a+b;
    }
    //减法:
    public int sub(int a , int b){
        return a-b;
    }
}
package com.themyth.calculator;
/**
 * @Auther: themyth
 */
public class Test {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //测试加法:
        Calculator cal = new Calculator();
        int result = cal.add(10,20);
        System.out.println(result);
        //测试减法:
        /*int result = cal.sub(30,10);
        System.out.println(result);*/
    }
}
package com.themyth.calculator;
/**
 * @Auther: themyth
 */
public class Test02 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        Calculator cal = new Calculator();
        //测试减法:
        int result = cal.sub(30,10);
        System.out.println(result);
    }
}

Junit的使用

【1】一般测试和业务做一个分离,分离为不同的包:
建议起名:公司域名倒着写+test
以后测试类就单独放在这个包下
【2】测试类的名字:****Test  --->见名知意
【3】测试方法的定义--》这个方法可以独立运行,不依托于main方法
建议:
名字:testAdd()    testSub()   见名知意
参数:无参
返回值:void

【4】测试方法定义完以后,不能直接就独立运行了,必须要在方法前加入一个注解:   @Test
【5】导入Junit的依赖的环境:

package com.themyth.test;
import com.themyth.calculator.Calculator;
import org.junit.Test;
/**
 * @Auther: themyth
 */
public class CalculatorTest {
    //测试add方法
    @Test
    public void testAdd(){
        System.out.println("测试add方法");
        Calculator cal = new Calculator();
        int result = cal.add(10,30);
        System.out.println(result);
    }
    @Test
    //测试sub方法
    public void testSub(){
        System.out.println("测试sub方法");
        Calculator cal = new Calculator();
        int result = cal.sub(10,30);
        System.out.println(result);
    }
}

【7】判定结果:
绿色:正常结果 
红色:出现异常 
例如:

 

【8】即使出现绿色效果,也不意味着你的测试就通过了,因为代码中逻辑也可能出现问题,这种情况怎么解决呢?
例如出现一下问题:本来是相加,但是业务逻辑中写错了。 

解决方案:加入断言,在这儿调用Assert.assertEquals()方法 

package com.themyth.test;
import com.themyth.calculator.Calculator;
import org.junit.Assert;
import org.junit.Test;
/**
 * @Auther: themyth
 */
public class CalculatorTest {
    //测试add方法
    @Test
    public void testAdd(){
        System.out.println("测试add方法");
        Calculator cal = new Calculator();
        int result = cal.add(10,30);
        //System.out.println(result);--->程序的运行结果可以不关注
        //加入断言:预测一下结果,判断一下我预测的结果和 实际的结果是否一致:
        Assert.assertEquals(40,result);//第一个参数:预测结果 第二个参数:实际结果
    }
    @Test
    //测试sub方法
    public void testSub(){
        System.out.println("测试sub方法");
        Calculator cal = new Calculator();
        int result = cal.sub(10,30);
        System.out.println(result);
    }
}

@Before 和 @After

@Before:
某一个方法中,加入了@Before注解以后,那么这个方法中的功能会在测试方法执行前先执行
一般会在@Beforer修饰的那个方法中加入:加入一些申请资源的代码:申请数据库资源,申请IO资源,申请网络资源。。。
@After:
某一个方法中,加入了@After注解以后,那么这个方法中的功能会在测试方法执行后先执行
一般会在@After修饰的那个方法中加入:加入释放资源的代码:释放数据库资源,释放IO资源,释放网络资源。。。

package comthemyth.test;
import com.themyth.calculator.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
 * @Auther: themyth
 */
public class CalculatorTest {
    @Before
    public void init(){
        System.out.println("方法执行开始了。。。");
    }
    @After
    public void close(){
        System.out.println("方法之行结束了。。。");
    }
    //测试add方法
    @Test
    public void testAdd(){
        System.out.println("测试add方法");
        Calculator cal = new Calculator();
        int result = cal.add(10,30);
        //System.out.println(result);--->程序的运行结果可以不关注
        //加入断言:预测一下结果,判断一下我预测的结果和 实际的结果是否一致:
        Assert.assertEquals(40,result);//第一个参数:预测结果 第二个参数:实际结果
    }
    @Test
    //测试sub方法
    public void testSub(){
        System.out.println("测试sub方法");
        Calculator cal = new Calculator();
        int result = cal.sub(10,30);
        System.out.println(result);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheMythWS

你的鼓励,我的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值