Java从零开始学四十六(Junit)

一、软件测试

软件开发:

项目调研--需求分析--软件设计--程序编码--软件测试--运行维护

软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系统的过程。目的在于检验是否满足规定的需求,确认预期结果与实际结果之间的差别。

墨盒测试-白盒测试-回归测试-单元测试

二、JUnit-单元测试工具

三、测试Junit测试类

创建被测试类

package com.pb.junit;
/**
 *1.创建被测试类
 *2.Junit 3.0或者4.0 这里有3.0
 *3.创建测试类
 *简单实现加,减,乖,除的计算器
 */
public class Calculator {

    //运算结果
    private static int result;

    //加法
    public void add(int n){
        result+=n;
    }
    //减法
        public void minus(int n){
            result-=n;
        }
        //乖法
        public void mult(int n){
            //result*=n;
        }
        //除法
        public void div(int n){
            if(n==0){
                System.out.println("除数不能为0!");
            }else{
                result/=n;
            }
        }
        //开方 :死循环
        public void sqr(){
            for(;;){

            }
        }

        //平方
        public void square(int n){
            result=n*n;

        }
        //清零运算结果
        public void clear(){
            result=0;
        }

        public  int getResult() {
            return result;
        }
        public  void setResult(int result) {
            Calculator.result = result;
        }

}

使用JUnit3测试

package com.pb.junit;

import junit.framework.Assert;
import junit.framework.TestCase;

public class CalculatorTest extends TestCase {
    //创建测试类对象
    Calculator calculator=new Calculator();
    //测试启动前运行的方法
    protected void setUp() throws Exception {
        super.setUp();
        calculator.clear();
        System.out.println("测试前");
    }
    //测试结束后运行的方法
    protected void tearDown() throws Exception {
        super.tearDown();
        System.out.println("测试后");
    }
    //JUnit3中测试方法必须以test开头
    public void testAdd() {
        calculator.add(2);
        calculator.add(3);  //2+3结果为5

        int result=calculator.getResult();
        Assert.assertEquals(5, result);
    }

    public void testMinus() {
        calculator.minus(1);
        calculator.minus(5);//期望结果为-6
        int result=calculator.getResult();
        Assert.assertEquals(-6, result);
    }

    public void testMult() {
        calculator.mult(3);
        calculator.mult(4);
        int result=calculator.getResult();
        Assert.assertEquals(12, result);
    }

    public void testDiv() {
        calculator.div(8);
        calculator.div(0);
        int result=calculator.getResult();
        Assert.assertEquals(4 ,result);
    }

}

使用JUnit4

package com.pb.junit;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

public class CalculatorTest {
    Calculator calculator=new Calculator();

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("============所有测试之前执行一次");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("所有测试之后执行一次==========");
    }

    @Before
    public void setUp() throws Exception {
        System.out.println("==========每个测试之前执行一次");
        calculator.clear();
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("每个测试之后执行一次=============");
    }
    //@Test 是必须的,测试方法可以不用以test开头,必须为public ,没有返回必须为void
    @Test
    public void testAdd() {
        calculator.add(3);
        calculator.add(2);
        int result = calculator.getResult();
        assertEquals(5, result);
    }
    //忽略这个测试方法
    @Ignore
    @Test
    public void testMinus() {
        fail("Not yet implemented");
    }

    @Test
    public void testMult() {
        fail("Not yet implemented");
    }
    //抛出预定义的异常
    @Test(expected=ArithmeticException.class)
    public void testDiv() throws ArithmeticException {
        calculator.add(8);
        calculator.div(0);
        int result=calculator.getResult();
        assertEquals(0, result);
    }

    @Test(timeout=5000) //超过5秒,算测试失败
    public void testSqr() {
        calculator.sqr();
        fail("Not yet implemented");
    }

    @Test
    public void testSquare() {
        fail("Not yet implemented");
    }

}

测试套件

package com.pb.junit;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({
    //测试用例类的名称
    Calculator1Test.class,
    Calculator2Test.class,
    CalculatorTest.class

})
public class TotalTest {

}
时间: 04-20

Java从零开始学四十六(Junit)的相关文章

Java从零开始学四十五(Socket编程基础)

一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

Java从零开始学四十四(多线程)

一.进程与线程 1.1.进程 进程是应用程序的执行实例. 进程是程序的一次动态执行过程,它经历了从代码加载.执行到执行完毕的一个完整过程,这个过程也是进程本身从产生.发展到最终消亡的过程 特征: 动态产生,动态消亡. 进程是并发性的. 进程独立性.是一个独立运行的基本单位,也是系统分配资源和调度的基本单位 1.2.线程 多线程是实现并发机制的一种有效手段.进程和线程一样,都是实现并发的一个基本单位 线程:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程 特点: 线程依赖进程生存 一个进程

Java从零开始学四十(反射简述一)

一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反射.通过反射,Java可以于运行时加载.探知和使用编译期间完全求和的类.生成其对象实体,调用其方法或者对属性设值.所以Java算是一个半动态的语言吧. 反射的概念: 在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方

Java从零开始学四十二(DOM解析XML)

一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <PhoneInfo name="手机品牌"> <Brand name="华为"> <Type name="U8650"> </Type> </Brand

Java从零开始学三十六(JAVA IO- 字符流)

一.字符流 BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中 BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的满时,再把缓冲区的内容写到字符输出流中 二.对文本文件的读写 2.1.字符输入流 2.2.字符输出流 2.3.综合使用 package com.pb.io.buffered; import java.io.BufferedReader; import java.io.BufferedWriter;

Java从零开始学二十六(包装类)

一.包装类 包装类是将基本类型封装到一个类中.也就是将基本数据类型包装成一个类类型. java程序设计为每一种基本类型都提供了一个包装类.这些包装类就在java.lang包中.有8个包装类 二.包装类的构造方法和静态方法 2.1.第一种 public Type (type value) 其中首字母大写的Type表示包装类,小写的type表示基本类型 这个构造方法接收一个基本数据类型值,并创建一个与之相应的包装类. 可以使用new关键字将一个基本类型包装为一个对象 Integer intValue

“全栈2019”Java多线程第四十六章:判断任意线程是否已持有写锁

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第四十六章:判断任意线程是否已持有写锁 下一章 "全栈2019"Java多线程第四十七章:判断锁是否为公平锁isFair() 学习小组 加入同步学习小组,共同交流与进步. 方式一:加入编程圈子. 方式二:关注头条号Gorhaf,私信"Java学习小组". 方式三:关

Java从零开始学四十一(反射简述二)

一.实例化Class类对象 实例化Class类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 二.Class类的常用方法 No. 方法 类型 描述 1 public static Class<?> forName(String className) throws ClassNotFoundException 普通 传入完整的“包.类”名称实例化Class对象 2 public Constructor[] getConstruc

Java从零开始学二十二(集合Set接口)

一.Set接口的定义 Set接口也是Collection接口的子接口,但是与Collection或List接口不同的是,Set接口中不能加入重复的元素 Set接口的主要方法与Collection是一致的 Set接口的实例无法像List接口那样进行双向输出.不存在get方法使用Iterator接口来遍历集合 2个常用方法:hasNext方法表示判断是否还有元素可以迭代 next()方法:返回迭代的下一个元素 Set接口的常用子类 散列存放:HashSet 有序存放:TreeSet 二.使用SetH