Junit3.8详解
来源:互联网 发布:15年总决赛数据 编辑:程序博客网 时间:2024/05/16 07:12
开篇
Junit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。另外Junit是在极限编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率。
初体验
我们刚刚完成了一个用于加减乘除的Calcalater类,下一步我们需要用单元测试去测试这个Calcalater类。
package com.tgb.junit3;/** * 数字计算 * * @author quwenzhe * */public class Calculater {public int add(int a, int b) {return a + b;}public int minus(int a, int b) {return a - b;}public int multiply(int a, int b) {return a * b;}public int divide(int a, int b) throws Exception {if (b == 0) {throw new Exception("除数不能为零!");}return a / b;}
当我们还不知道有Junit这种神器存在时,我们肯定选择用main方法去挨个测试Calculater类中的各个方法执行。这是个相当的繁琐的过程,而且不方便维护,下面我们看看Junit是如何完成单元测试的。
在项目目录下新建Source Folder,在Source Folder下创建一个和Calculater所在包相同的包名。效果如下:
这么做的目的是使Calculater.java和CalculaterTest.java编译后的.class文件在bin的同一目录下,Calculater.java在使用Calculater.java时不再添加对其包的引用。
创建测试Calculater.java的单元测试类CalculaterTest.java,该类继承TestCase父类:
package com.tgb.junit3;import junit.framework.Assert;import junit.framework.TestCase;/** * 在junit3.8中测试类必须继承TestCase父类 * * keep the bar green to keep to code clean * * 单元测试不是证明您是对的,而是证明您没有错误 * @author quwenzhe * */public class CalculaterTest extends TestCase {/** * 在Junit3.8中,测试方法满足如下原则: 1)public 2)void 3)无方法参数 4)方法名必须以test开头 */public void testAdd() {Calculater cal = new Calculater();int result = cal.add(1, 2);// 断言:assertAssert.assertEquals(4, result);}}
关于Junit测试方法的书写规范我已经写到代码的注释中,请大家严格遵守。这样,直接运行CalculaterTest单元测试类即可完成对Calculater的单元测试。
进阶一 断言
在Junit中有断言这么一说,什么意思呢?断言好比咱们的预期效果,当我们执行程序时,肯定心里知道程序应该输出什么结果。我们可以提前设置好期望值,然后将期望值和程序的执行结果进行比较,根据比较结果判定返回单元测试结果。
public void testDivide() {Throwable tx = null;try {Calculater cal = new Calculater();cal.divide(4, 0);// 预期是不执行fali方法,一旦执行,则测试失败Assert.fail();} catch (Exception ex) {tx = ex;}Assert.assertNotNull(tx);Assert.assertEquals(Exception.class, tx.getClass());Assert.assertEquals("除数不能为零!", tx.getMessage());}我们预期的执行效果是执行catch中的内容,因为4/0会报异常,所以Assert.fail()方法肯定不会执行。这思路好比:我说Assert.fail()这行代码肯定不会执行(预期效果),如果执行,则单元测试失败。
进阶二 setUp方法和tearDown方法
在Junit3.8中,每个test...方法执行前都会执行setUp方法,每个test...方法执行后都会执行tearDown方法,所以我们可以把调用test...方法公共的部分放到setUp方法和tearDown方法中。
比如,如果写的是一个访问数据库的单元测试类,我们可以把打开数据库的方法放在setUp方法中,把关闭数据库的方法放在tearDown方法中。
进阶三 运行多个test类
package com.tgb.junit3;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;public class TestAll extends TestCase {public static Test suite() {TestSuite suite = new TestSuite();suite.addTestSuite(CalculaterTest.class);suite.addTestSuite(LargestTest.class);return suite;}}好了,关于Junit3.8的详解到此完成。Junit是个好东西,我们需要多想多用才能触类旁通、举一反三。
- junit3.8实践详解
- Junit3.8详解
- junit3.8
- Junit3.8
- 基于Junit3.8和Junit4.x的单元测试详解
- Junit3.8入门
- junit3.8测试dao
- junit3.8源码分析
- JUnit3.8使用简介
- Junit3.8 初学
- Junit3.8入门
- junit3.8的使用
- JUnit3
- JUnit3.8的初步学习
- JUnit3.8的Junit单元测试.
- Junit3.8源码--核心类
- JUnit3.8实现模拟堆栈的测试
- 单元测试(Junit3.8)原则和测试用例
- Java基础——多线程
- 集合及jdk部分新特性
- 48小时?改变世界?!!——这些拯救世界的创意你听说过吗?全球可持续设计工作坊(上海站)圆满收官
- SQL Server 和 MySql 语法和关键字区别
- C#学习笔记
- Junit3.8详解
- linux驱动学习笔记(linux驱动头文件说明)
- JUDE画UML(11dota简易猜想)
- S3C2440 SDRAM内存驱动
- C语言--数组小记
- iOS 开发百问(8)
- mysql 多列索引的详细说明
- windows 中java开发环境搭建
- Linux七天系列(第四天)