**********************单元测试和JUnit********************************
为什么要使用单元测试
1.底层代码没问题,上一层才不会出现问题.. 就像盖楼一样
2.提高士气,明确知道我的东西是没问题的, 保证你不被开
3.加大测试的力度可以降低后期维护的成本
一.什么是JUnit
JUnit是一个单元测试框架,另一个叫做TestNG
框架: 一组类(普通类、抽象类、接口)的集合,别人帮你写好了,你直接拿来用就可以了,
提供一系列功能... 提供了测试相关的功能
半成品: 一半已经完成了、一半没有完成
类似于填空题、选择题
使用框架的好处: 限制了程序员的随意发挥,提高了程序的可读性和可维护性,便于团队的开发
JUnit已经逐渐成为xUnit家族中最为成功的一个.
xUnit中还有: cppUnit、pythonUnit、xUnit.net
二.why 为什么用JUnit
使用main方法测试好不好??
不好.缺点如下
1.多个测试用例类无法同时测,每测一个业务逻辑类 都用单独去执行它的测试用例,比较麻烦
2.使用main方法测试需要人为的观察 测试结果 比如看到30 就是正确 比较麻烦
使用了jUnit以后 只需要看bar就可以了 绿条 表示测试通过 红条 表示测试失败
三.how 如何使用jUnit
去官网下载 http://junit.org/
最新版本jUnit5 ,我们使用的是稳定版本 jUnit-4.10
下载下来以后是一个zip包,解压缩 使用里面的 junit-4.10.jar 文件即可
1. 导jar包
把junit-4.10.jar 导到 myeclipse中的 build-path中
工程右键-build path -configure build path--libraies--add external jar
选中d:\ jUnit-4.10.jar 即可
jar包; 实质就是压缩包, zip、rar、jar
什么是build-path?build-path的作用?
build- path 构建路径
build-path相当于以前所学的class-path的概念,build-path是myeclipse自己
的一套classpath.
程序员知道jar包在d:\盘 ,但是myeclipse不知道,如何让myeclipse找到jar包
把jar添加到build-path中就可以了,myeclipse就能找到jar包了
如果程序员没有使用任何IDE编程, 例如使用editplus 这样想使用jar包需要把
jar包的路径添加到classpath中即可
Classpath: 运行的类去哪找 是去Classpath找,编译的时候 当前类 依赖的类(TestCase) 去哪找 也是去Classpath下找
如果没有把 jUnit-4.10.jar加到 classpath是找不到这个类的...
2. 进行测试
(1) 业务逻辑类 Calculator
(2) 编写测试用例类
TestXXX
TestCalculator
*************************************使用jUnit如何编写测试用例类*******************************
1. jUnit3
演示代码:
package com.chapter17;
import junit.framework.TestCase;
//测试用例类
//jUnit3的测试用例类
public class TestCalculator extends TestCase {
// 测试方法的命名规范
// public void textXXX 没有任何的参数
public void testAdd() {
Calculator cal = new Calculator();
int sum = cal.add(10, 20);
//使用断言来代替 System.out.println
//断言: 就是判断的意思
assertEquals("亲,失败了",30,sum);
}
}
如何运行:
展开Outline概要视图 在你想要运行的测试方法上面 右键 run as -junit test
2. jUnit4
测试用例类不需要继承任何类,直接在测试方法上面加一个@Test注解就可以了
演示代码:
import org.junit.Test;
import static org.junit.Assert.*;
//jUnit4的测试用例类
public class TestCalculator4 {
@Test
public void testAdd(){
Calculator cal = new Calculator();
int sum = cal.add(10, 20);
assertEquals("亲,失败了",30,sum);
}
}
**********************************测试结果分析****************************************
1. 测试通过 Pass
期望值和实际值相等,表示测试通过...绿条
一组测试用例
输入参数1 输入参数2 期望值 实际值
10 20 30 30
2. 测试失败 Failure
期望值和实际值不等,红条
3. 测试错误 Error
测试代码本身出现问题... 需要先把测试代码的错误修正以后 再从新进行测试
*************************************测试常用的方法*******************************
jUnit3
setUp(): 在每个测试方法执行前执行,一般用来放建立资源的代码(例如连接数据库、建立socket连接等)
tearDown(): 在每个测试方法执行后执行,一般用来放释放资源的代码(例如关闭数据库、关闭socket连接等)
jUnit4
Unit4支持多种注解来简化测试类的编写
–@Before 注解:与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行。
–@After 注解:与junit3.x中的tearDown()方法功能一样,在每个测试方法之后执行。
–@BeforeClass 注解:在所有方法执行之前执行。
–@AfterClass 注解:在所有方法执行之后执行。
–@Test注解:表示当前方法为需要测试的方法。
–@Ignore:临时禁止一个测试的方法是通过注释掉它或者改变命名约定,这样测试运行机就无法找到它。
**测试期望出现一个异常
@Test(expected=ArithmeticException.class)
public void testDivide(){
Calculator cal = new Calculator();
int result = cal.divide(10, 2);
}
**测试效率
新建一个业务逻辑类
public class FileCopy {
public void copy(){
for(int i=1;i<=1000;i++){
System.out.println(i);
}
}
}
测试用例类
public class TestFileCopy {
@Test(timeout=50)
public void testCopy(){
FileCopy fc = new FileCopy();
fc.copy();
}
}
*************************************测试套件*******************************
如果想执行多个测试用类,之前需要在每个测试用例类 上面 单击右键 一个一个执行,比较麻烦.
有没有一种方式可以让多个测试用例类 同时执行?
有的.可以把多个测试用例类加入到测试套件中,只需要执行该测试套件即可..执行了这个测试套件,相当于
把该测试套件中所有的测试用例类都挨个执行了
*************************************参数化测试*******************************
让多组测试用例的数据同时执行
演示代码参见教案