Junit单元测试

目录

  • 测试的引入
    • 软件测试目的
    • 测试分类
  • 没有Junit时怎么测试
  • Junit的使用
  • 测试中@Before和@After注解
    • @Before
    • @After

测试的引入

软件测试目的

软件测试的目的是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

测试分类

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

没有Junit时怎么测试

package com.lxg.junit;

/**
 * @author lxg
 * @description 没有Junit时测试演示
 * @date 2021/9/23
 */
public class Calculate {

    //加法
    public int add(int a,int b){
        return a+b;
    }

    //减法
    public int sub(int a,int b){
        return a-b;
    }
}

在main方法中测试

package com.lxg.junit;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

/**
 * @author lxg
 * @description 测试类
 * @date 2021/9/23
 */
public class Test {
    public static void main(String[] args) {
        //测试加法
        Calculate cal = new Calculate();
        int result = cal.add(10,20);
        System.out.println(result);

        //测试减法
       //int result = cal.sub(20,10);
        System.out.println(result);

    }
}

缺点

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

Junit的使用

【1】一般测试和业务做一个分离,分离为不同的包:
建议起名:公司域名倒着写+test
以后测试类就单独放在这个包下
【2】测试类的名字:****Test —>见名知意
3】测试方法的定义–》这个方法可以独立运行,不依托于main方法
建议:
名字:testAdd() testSub() 见名知意
参数:无参
返回值:void
【4】测试方法定义完以后,不能直接就独立运行了,必须要在方法前加入一个注解: @Test
【5】导入Junit的依赖的环境:
Junit单元测试_第1张图片
【6】代码:
`package lxg.junit;

import com.lxg.junit.Calculate;
import org.junit.Test;
public class CalculatorTest {

//测试加法
@Test
public void testAdd(){
    Calculate cal = new Calculate();
    int result = cal.add(10,20);
    System.out.println(result);
}

//测试减法
@Test
public void testSub(){
    Calculate cal = new Calculate();
    int result = cal.sub(30,20);
    System.out.println(result);
}}`

【7】判定结果:
绿色:正常结果
红色:出现异常
【8】即使出现绿色效果,也不意味着你的测试就通过了,因为代码中逻辑也可能出现问题,这种情况怎么解决呢?
加入断言

package lxg.junit;

import com.lxg.junit.Calculate;
import org.junit.Assert;
import org.junit.Test;

/**
 * @author lxg
 * @description 测试类
 * @date 2021/9/23
 */
public class CalculatorTest {


    //测试加法
    @Test
    public void testAdd(){
        Calculate cal = new Calculate();
        int result = cal.add(10,20);
        //System.out.println(result); 程序的运行结果可以不关注
        //加入断言:预测以下为结果,判断一下预测的结果和实际的结果是否一致:
        Assert.assertEquals(30,result); //第一个参数预测结果,第二个参数实际结果
        Assert.assertEquals(25,result);
    }

    //测试减法
    @Test
    public void testSub(){
        Calculate cal = new Calculate();
        int result = cal.sub(30,20);
        System.out.println(result);
    }
}

测试中@Before和@After注解

@Before

在某个方法中加@Before注解后,那么测试方法在执行前会执行这个方法
一般会在这个方法中加入:
申请资源的代码,申请数据库资源、申请IO资源、申请网络资源、、、、、

@After

在某个方法中加入@After注解,那么测试方法在执行之后会执行这个方法,
一般都将释放资源的代码写在这个方法中。

package lxg.junit;

import com.lxg.junit.Calculate;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
 * @author lxg
 * @description 测试类
 * @date 2021/9/23
 */
public class CalculatorTest {

    @Before
    public void init(){
        System.out.println("测试方法开始了");
    }

    @After
    public void end(){
        System.out.println("方法测试结束了");
    }

    //测试加法
    @Test
    public void testAdd(){
        Calculate cal = new Calculate();
        int result = cal.add(10,20);
        //System.out.println(result); 程序的运行结果可以不关注
        //加入断言:预测以下为结果,判断一下预测的结果和实际的结果是否一致:
        Assert.assertEquals(30,result);//第一个参数预测结果,第二个参数实际结果
        Assert.assertEquals(25,result);
    }

    //测试减法
    @Test
    public void testSub(){
        Calculate cal = new Calculate();
        int result = cal.sub(30,20);
        System.out.println(result);
    }
}

你可能感兴趣的:(#,JavaSE,单元测试,测试工具,Junit,java)