junit基本介绍视频笔记1

程序员每天工作的基本流程: 
1、从svn检出代码; 
2、运行单元测试,测试无误,进入下一步; 
3、开始一天的代码编写工作; 
4、代码提交到服务器之前进行单元测试; 
5、单元测试通过提交到svn服务器。

一些关于测试的概念:1、集成测试;2、验收测试、压力测试

由此引出了单元测试的最基本的需求是:实现自动化测试。

该门课程的主要内容: 
单元测试 
1、自动化测试 
(1)通过断言的方式来确定结果是否正确 Assert; 
(2)引入 junit 的 jar 包; 
(3)创建一个操作类 
2、基于测试开发的方式和优点 
3、stub 和 mock 
4、在容器中测试 
(1)jetty 
(2)catcus 
5、dbunit

接下来我们进行简单的操作

第一步建立一个java工程,导入junit 4.0版本以上的java包,最好不要使用eclipse自带的java包,将该java添加进入工程中

第二步:编写一个我们要进行测试类。我们使用加减操作

package com.weiyuan.test;

/**
 * 需要测试的类用于增删改查操作
 * */
public class Calcuate {

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

    public int minus(int a,int b){
        return a-b;
    }

    public int divide(int a,int b){
        return a/b;
    }

    public int mul(int a,int b){
        return a/b;
    }

}

第三步:创建我们的测试类,我们在eclipse中创建sourefoder文件夹,命名为test文件夹

默认情况下:
source folder是用来存放Java源代码的,其下的所有Java源文件都会被时时编译成class文件。对于JavaSE的项目会被编译到项目目录下的bin目录下,对于JavaEE项目会被编译到相应的/WEB-INF/classes文件夹中

在test目录下建立包文件,包名称和我们需要测试的类一样,这样编译之后,会把test目录下生成的class文件和src目录下生成的class文件都放在bin目录下的com/weiyuan/test目录下

例如我们要测试cacluate中的add方法,对应的测试方法就像testAdd()开头

package com.weiyuan.test;

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

public class TestCalcuate {
    private Calcuate calcuate;

    /**
     *
     * 执行任何测试方法之前都会调用该方法
     * */
    @Before
    public void setUp(){
        calcuate = new Calcuate();
    }

    /**
     * 为了兼容junit3
     * 按照testXX方法命名
     * public int (int a,int b){
     * */

    @Test
    public void testAdd(){
        int result = calcuate.add(12, 20);
        Assert.assertEquals("加法有问题", result, 32);
    }

}

在junit3中由于测试类继承了了TestCase方法,在调用的时候直接就使用了下面这种形式

@Test
    public void testAdd(){
        int result = calcuate.add(12, 20);
        assertEquals("加法有问题", result, 32);
    }

为了能够兼容junit3,使用上面一样的方法,我们可以使用静态导入Assert类来解决上面的问题

package com.weiyuan.test;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

public class TestCalcuate {
    private Calcuate calcuate;

    /**
     *
     * 执行任何测试方法之前都会调用该方法
     * */
    @Before
    public void setUp(){
        calcuate = new Calcuate();
    }

    /**
     * 为了兼容junit3
     * 按照testXX方法命名
     * public int (int a,int b){
     * */

    @Test
    public void testAdd(){
        int result = calcuate.add(12, 20);
        assertEquals("加法有问题", result, 32);
    }

}接下来我们就可以测试点击
 

绿色表示正常通过

表示有异常

接下来我们来看junit检查异常

package com.weiyuan.test;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

public class TestCalcuate {
    private Calcuate calcuate;

    /**
     *
     * 执行任何测试方法之前都会调用该方法
     * */
    @Before
    public void setUp(){
        calcuate = new Calcuate();
    }

    /**
     * 为了兼容junit3
     * 按照testXX方法命名
     * public int (int a,int b){
     * */

    @Test
    public void testAdd(){
        int result = calcuate.add(12, 20);
        assertEquals("加法有问题", result, 32);
    }

    @Test
    public void testDivide(){
        int result = calcuate.divide(12, 0);
        assertEquals("触发有问题", result, 4);
    }

}

我们在上面除法的时候被除数不能为0,这里肯定会抛出异常

导致上面的用例失败,如果我们要让该用例通过,可以采用下面的方法

标准的JUnit的org.junit.Test注解提供了一个expected属性,你可以用它来指定一个Throwble类型,如果方法调用中抛出了这个异常,这条测试用例就算通过了。

package com.weiyuan.test;

import java.security.AlgorithmParameterGenerator;
import java.security.AlgorithmParameters;

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

import static org.junit.Assert.*;

public class TestCalcuate {
    private Calcuate calcuate;

    /**
     *
     * 执行任何测试方法之前都会调用该方法
     * */
    @Before
    public void setUp(){
        calcuate = new Calcuate();
    }

    /**
     * 为了兼容junit3
     * 按照testXX方法命名
     * public int (int a,int b){
     * */

    @Test
    public void testAdd(){
        int result = calcuate.add(12, 20);
        assertEquals("加法有问题", result, 32);
    }

    @Test(expected=ArithmeticException.class)
    public void testDivide(){
        int result = calcuate.divide(12, 0);
        assertEquals("触发有问题", result, 4);
    }

}

这样运行的时候就可以通过测试

接下来我们讲讲性能测试的timeout

package com.weiyuan.test;

import java.security.AlgorithmParameterGenerator;
import java.security.AlgorithmParameters;

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

import static org.junit.Assert.*;

public class TestCalcuate {
    private Calcuate calcuate;

    /**
     *
     * 执行任何测试方法之前都会调用该方法
     * */
    @Before
    public void setUp(){
        calcuate = new Calcuate();
    }

    /**
     * 为了兼容junit3
     * 按照testXX方法命名
     * public int (int a,int b){
     * */

    @Test
    public void testAdd(){
        int result = calcuate.add(12, 20);
        assertEquals("加法有问题", result, 32);
    }

    @Test(expected=ArithmeticException.class)
    public void testDivide(){
        int result = calcuate.divide(12, 0);
        assertEquals("触发有问题", result, 4);
    }

    /**
     * 如果测试方法执行超过200毫秒
     * 就会报错
     * */

    @Test(timeout=200)
    public void testTimeout(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

我们来运行下

原文地址:https://www.cnblogs.com/kebibuluan/p/8906027.html

时间: 2024-11-09 08:12:18

junit基本介绍视频笔记1的相关文章

Android老罗视频笔记-http-1

---恢复内容开始--- 以下是看老罗视频的笔记: (所有图片来自老罗视频的截图) 一.老罗视频教程思路:android入门介绍-->百度地图介绍-->常用UI布局的介绍-->常用的UI的控件.(应用开发控件:HTTP协议编程了解服务器与安卓之间的交互.) 二.WWW是以Internet作为传输媒介的一个应用程序,WWW网上基本的传输单位是Web网页.B-S结构.WWW的工作是基于客户机/服务器计算模型(j2ee).由Web浏览器和Web服务器构成,两者之间采用超文本传输协议HTTP进行

ng机器学习视频笔记(十二) ——PCA实现样本特征降维

ng机器学习视频笔记(十二) --PCA实现样本特征降维 (转载请附上本文链接--linhxx) 一.概述 所谓降维(dimensionality reduction),即降低样本的特征的数量,例如样本有10个特征值,要降维成5个特征值,即通过一些方法,把样本的10个特征值映射换算成5个特征值. 因此,降维是对输入的样本数据进行处理的,并没有对预测.分类的结果进行处理. 降维的最常用的方法叫做主成分分析(PCA,principal component analysis).最常用的业务场景是数据压

ng机器学习视频笔记(九) ——SVM理论基础

ng机器学习视频笔记(九) --SVM理论基础 (转载请附上本文链接--linhxx) 一.概述 支持向量机(support vector machine,SVM),是一种分类算法,也是属于监督学习的一种.其原理和logistics回归很像,也是通过拟合出一个边界函数,来区分各个分类的结果. 二.代价函数与假设函数 由于svm和logistic很相似,故与logistic进行比较.logistic的代价函数如下: 与logistic不同之处在于,SVM是用两个线段表示logistic中的h.在l

ng机器学习视频笔记(十四) ——推荐系统基础理论

ng机器学习视频笔记(十三) --推荐系统基础理论 (转载请附上本文链接--linhxx) 一.概述 推荐系统(recommender system),作为机器学习的应用之一,在各大app中都有应用.这里以用户评价电影.电影推荐为例,讲述推荐系统. 最简单的理解方式,即假设有两类电影,一类是爱情片,一类是动作片,爱情片3部,动作片2部,共有四个用户参与打分,分值在0~5分. 但是用户并没有对所有的电影打分,如下图所示,问号表示用户未打分的电影.另外,为了方便讲述,本文用nu代表用户数量,nm代表

虚幻4视频笔记002:精简StarterContent文件夹体积

#虚幻4#视频笔记:精简StarterContent文件夹体积 . 在很多练习项目和测试项目中,都会使用StarterContent文件夹,但是该文件夹体积巨大,如果项目数量多会占用大量空间,并且分享起来也很麻烦.这里提供了一种精简体积的简单方法.注意明确视频内容后再对项目进行精简,并且也不要在生产环境中使用这个技巧. 油管: http://t.cn/Rtgk4is 度盘:http://t.cn/Rtgk46v

ng机器学习视频笔记(三) ——线性回归的多变量、特征缩放、标准方程法

ng机器学习视频笔记(三) --线性回归的多变量.特征缩放.标准方程法 (转载请附上本文链接--linhxx) 一.多变量 当有n个特征值,m个变量时,h(x)= θ0+θ1x1+θ2x2-+θnxn,其中可以认为x0=1.因此,h(x)= θTx,其中θ是一维向量,θ=[θ0, θ1-θn] T,x也是一维向量,x=[x0,x1..xn] T,其中x0=1. 二.特征缩放(Feature Scaling) 特征缩放的目的,是为了让每个特征值在数量上更加接近,使得每个特征值的变化的影响相对比较"

ng机器学习视频笔记(十一) ——K-均值算法理论

ng机器学习视频笔记(十一) --K-均值算法理论 (转载请附上本文链接--linhxx) 一.概述 K均值(K-Means)算法,是一种无监督学习(Unsupervised learning)算法,其核心是聚类(Clustering),即把一组输入,通过K均值算法进行分类,输出分类结果. 由于K均值算法是无监督学习算法,故这里输入的样本和之前不同了,输入的样本只有样本本身,没有对应的样本分类结果,即这里的输入的仅仅是{x(1),x(2),-x(m)},每个x没有对应的分类结果y(i),需要我们

ng机器学习视频笔记(四) ——logistic回归

ng机器学习视频笔记(四) --logistic回归 (转载请附上本文链接--linhxx) 一.概述 1.基本概念 logistic回归(logistic regression),是一个分类(classification)算法(注意不是回归算法,虽然有"回归"二字),用于处理分类问题,即结果是离散的.另外,由于有固定的结果,其是监督学习算法. 例如,预测天气.预测是否通过考试等,结果是离散的值,而预测房价这种就属于"回归"算法要解决的问题,而不是分类算法解决的问题

ng机器学习视频笔记(十五) ——大数据机器学习(随机梯度下降与map reduce)

ng机器学习视频笔记(十五) --大数据机器学习(随机梯度下降与map reduce) (转载请附上本文链接--linhxx) 一.概述 1.存在问题 当样本集非常大的时候,例如m=1亿,此时如果使用原来的梯度下降算法(也成为批量梯度下降算法(batch gradient descent),下同),则速度会非常慢,因为其每次遍历整个数据集,才完成1次的梯度下降的优化.即计算机执行1亿次的计算,仅仅完成1次的优化,因此速度非常慢. 2.数据量考虑 在使用全量数据,而不是摘取一部分数据来做机器学习,