Java单元测试和JUnit

**********************单元测试和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();
}
}


*************************************测试套件*******************************


如果想执行多个测试用类,之前需要在每个测试用例类 上面 单击右键 一个一个执行,比较麻烦.
有没有一种方式可以让多个测试用例类 同时执行?

有的.可以把多个测试用例类加入到测试套件中,只需要执行该测试套件即可..执行了这个测试套件,相当于

把该测试套件中所有的测试用例类都挨个执行了


*************************************参数化测试*******************************


让多组测试用例的数据同时执行


演示代码参见教案

猜你喜欢

转载自www.cnblogs.com/MrTanJunCai/p/9906849.html