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();
}
} }
我们来运行下

@Before 来注释多个方法,这些方法都在每个测试之前运行:
@After来注释的多个方法,这些方法在每个测试方法之后被运行
1 注释(Annotations)
|
Annotation |
含义 |
|
@Test public void method() |
定义一个要测试的方法 |
|
@Before public void method() |
在每一个测试之前都会被执行的方法,这个方法常常用来进行一 些测试环境的准备,比喻说读入输入数据,初始化类 |
|
@After public void method() |
与@Before进行对应,做一个清理工作 |
|
@BeforeClass public void method() |
在所有的测试开始之前执行,这个方法在类运行的时候运行, 而且只会运行一次,所以常常用来做一些所有的方法都要依赖 到工作,比喻说,数据库的链接。 |
|
@AfterClass public void method() |
与@BeforeClass进行对应,做一些类级别的清理工作 |
|
@Ignore |
表明方法是被忽略的,这个方法非常实用,比喻你的方法已经 修改,但是对应的测试方法还没有得到一致的修改的时候,可以 忽略掉这个测试方法先。 |
|
@Test(expected=IllegalArgumentException.class) |
检查测试方法是不是抛出了对应的异常 |
|
@Test(timeout=100) |
如果方法的执行操作所耗费的毫秒数>100MS,那么方法失败。 |
junit基本介绍视频笔记1的更多相关文章
- ng机器学习视频笔记(一)——线性回归、代价函数、梯度下降基础
ng机器学习视频笔记(一) --线性回归.代价函数.梯度下降基础 (转载请附上本文链接--linhxx) 一.线性回归 线性回归是监督学习中的重要算法,其主要目的在于用一个函数表示一组数据,其中横轴是 ...
- ng机器学习视频笔记(二) ——梯度下降算法解释以及求解θ
ng机器学习视频笔记(二) --梯度下降算法解释以及求解θ (转载请附上本文链接--linhxx) 一.解释梯度算法 梯度算法公式以及简化的代价函数图,如上图所示. 1)偏导数 由上图可知,在a点 ...
- ng机器学习视频笔记(十六) ——从图像处理谈机器学习项目流程
ng机器学习视频笔记(十六) --从图像处理谈机器学习项目流程 (转载请附上本文链接--linhxx) 一.概述 这里简单讨论图像处理的机器学习过程,主要讨论的是机器学习的项目流程.采用的业务示例是O ...
- DevExpress v15.2新功能介绍视频(25集全)
DevExpress v15.2新功能介绍视频(25集全) http://www.devexpresscn.com/Resources/Documentation-508.html DevExpres ...
- IDEA 正式版终于支持中文版和 JDK 直接下载了(太方便了)附介绍视频
IDEA 2020.1 经过了漫长的打磨终于发布正式版了,而这次的版本不止直接支持 Java 14,还带来了两个重量级的功能,官方中文版支持和 JDK 直接下载. 在之前的开发中,当我们需要下载 JD ...
- [基础]斯坦福cs231n课程视频笔记(二) 神经网络的介绍
目录 Introduction to Neural Networks BP Nerual Network Convolutional Neural Network Introduction to Ne ...
- 无限互联IOS电影项目视频笔记
下面是该iOS项目视频教程的内容大纲: 观看指南 (1)项目为第一阶段内容 (2)需要熟练掌握OC语言 (3)UI部分需要学习到第十节课 (4)项目适合刚入门的iOS开发者 1.第一天 (1)iOS ...
- 《Junit实战》读书笔记
核心原则:任何没有经过自动测试的程序功能都可以当做不存在 单元测试框架的大三规则: 1.每个单元测试都必须独立于其他所有单元测试而运行 2.框架应该以单个测试为单元来检测和报告错误 3.应该易于定义要 ...
- 斯坦福机器学习视频笔记 Week1 Linear Regression and Gradient Descent
最近开始学习Coursera上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...
随机推荐
- Servlet配置及生命周期
1.设置Ecilipse快捷 file new 2.创建Servlet程序 1). 创建一个 Servlet 接口的实现类. public class HelloServl ...
- 14 . Python3之MysSQL
数据库概念 数据库: 按照数据结构来组织.存储.管理数据的仓库` 诞生 计算机的发明是为了做科学计算的,而科学计算需要大量的输入和输出. 早期,可以使用打孔卡片的孔.灯泡的亮灭表示数据输入,输出. 后 ...
- 从汉堡加料说起——浅谈C#中的Decorator模式
相信大家都在都在汉堡店吃过汉堡,有些汉堡店很有特色,推出了汉堡订制服务,即,可以在汉堡中加料,加肉饼,加生菜之类(有点类似我们本地的肥肠粉里面加冒结子).更是让不少吃货大快朵颐,大呼过瘾,加6,7层肉 ...
- Rocket - interrupts - Crossing
https://mp.weixin.qq.com/s/nSX4prXFb4K5GSUhPtOUCg 简单介绍Crossing的实现. 1. IntXing 这是一个LazyModule: 1) 参数 ...
- jchdl - GSL实例 - Mux4(使用Mux)
https://mp.weixin.qq.com/s/GrYJ4KXEFRoLLmLnAGoMSA 原理图 参考链接 https://github.com/wjcdx/jchdl/blob/ma ...
- Chisel3 - model - IO ports
https://mp.weixin.qq.com/s/fgCvIFt0RdEajhJVSy125w 介绍模块的输入输出端口的定义与管理. 1. _ports 1) 模块的输入输出端口, ...
- Javascript中target事件属性,事件的目标节点的获取。
window.event.srcElement与window.event.target 都是指向触发事件的元素,它是什么就有什么样的属性 srcElement是事件初始化目标html元素对象引用,因为 ...
- JavaScript (二) js的基本语法 - - 运算符、流程控制
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.运算符 1.一元运算符 ++ -- 都是运算符 ++ 和 -- 可以分为:前+ 和后+ and 前- ...
- Linux (七)权限控制
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1. 概述 Linux需要对登录用户读写执行文件.进入目录.查看增删目录内容等操作进行控制,不能任由用户 ...
- Java实现 蓝桥杯 算法提高 快速排序
试题 算法提高 快速排序 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 用递归来实现快速排序(quick sort)算法.快速排序算法的基本思路是:假设要对一个数组a进行排序,且a ...

