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上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...
随机推荐
- Java实现 LeetCode 814 二叉树剪枝 (遍历树)
814. 二叉树剪枝 给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1. 返回移除了所有不包含 1 的子树的原二叉树. ( 节点 X 的子树为 X 本身,以及所有 X 的后代. ...
- java实现 历届试题 蓝桥杯 打印十字图
历届试题 打印十字图 题目描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg) 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数. 为了能 ...
- Java实现 LeetCode 150 逆波兰表达式求值
150. 逆波兰表达式求值 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波 ...
- Java实现夺冠概率模拟
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表: 甲 乙 丙 丁 甲 - 0.1 0.3 0.5 ...
- awardRotate转盘插件文字模糊问题和图片加载问题
前言 最近在做一个转盘抽奖页面,使用了awardRotate.js发现字体和图片都有模糊,绘制的时候图片绘制不全,搜索一下之后发现针对awardRotate的解决方法比较少,针对canvas的比较多, ...
- Netty源码学习系列之4-ServerBootstrap的bind方法
前言 今天研究ServerBootstrap的bind方法,该方法可以说是netty的重中之重.核心中的核心.前两节的NioEventLoopGroup和ServerBootstrap的初始化就是为b ...
- 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'xxxx'中的标识列指定显式值
执行以下sql INSERT INTO [Country] VALUES (, N'中国', N'China', N'CN'); 提示错误 仅当使用了列列表并且 IDENTITY_INSERT 为 O ...
- xmake v2.3.4 发布, 更加完善的工具链支持
为了让xmake更好得支持交叉编译,这个版本我重构了整个工具链,使得工具链的切换更加的方便快捷,并且现在用户可以很方便地在xmake.lua中扩展自己的工具链. 关于平台的支持上,我们新增了对*BSD ...
- springmvc使用<mvc:default-servlet-handler/>导致的handler失效
使用springmvc时,会在web.xml中配置对所有请求进行拦截 <!-- 配置springmvc拦截的请求--> <servlet-mapping> <servle ...
- 京东商品 + selenium
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys bro=webdr ...