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上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...
随机推荐
- 第一次写js轮播图
仿小米首页轮播图(注意事项) 布局部分 1.用ul包裹li再包裹a的形式来装图片,建立focus类: <div class="focus"> <ul> &l ...
- 是时候扔掉cmder, 换上Windows Terminal
作为一个Windows的长期用户,一直没有给款好用的终端,知道遇到了 cmder,它拯救一个习惯用Windows敲shell命令的人. 不用跟我安利macOS真香!公司上班一直用macOS,一方面确实 ...
- 微信小程序支付(企业支付给用户零钱)
内容摘要:本案例客户端支付方式为微信小程序支付(JSAPI).商户运营一段时间后,在微信商户平台开通企业支付服务后,即可调用微信支付提供的企业付款接口将佣金等金额通过微信零钱返现给C端用户零钱. 服务 ...
- 记录B端和C端产品的理解
C 为:Consumer.Client,我们每天都在接触C端产品,为消费者.个人用户或终端用户,比如:微信.头条.抖音.美团等等. B 为:Business,作为职场人士也会经常接触B端产品,通常为企 ...
- thymeleaf怎么在页面上面格式化时间
th:value="${#dates.format(后端传递的时间,‘yyyy-MM-dd HH:mm:ss’)}"
- 用python实现汉诺塔问题
一.用动画实现汉诺塔问题: import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): retu ...
- Java实现 LeetCode 538 把二叉搜索树转换为累加树(遍历树)
538. 把二叉搜索树转换为累加树 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和 ...
- 在MyEclipse中设置jdk
在MyEclipse中设置jdk的三处地方:1 选中项目右键菜单properties -->java Compiler 2 windows菜单中Preferences-->myeclips ...
- TypeScript使用体会(一)
typescript使用体会 近期接手了一个公司项目是由TS写的,第一次用在这里做一下简单的使用体会 个人觉得TS与JS相差不多,只是多了一些约束(可能自己还没体会到精髓) typescript是Ja ...
- virtualbox 基于nat模式搭建局域网并且和宿主机通信
1.VIRTUALbox 2.两台虚拟机,设置网络为DHCP方式 检查文件确认是dhcp模式不是的百度搜索修改:/etc/sysconfig/network-scripts/ifcfg-enps3(网 ...