JUnit3的作用

简要说JUnit的4大功能 
1. 管理测试用例。修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试。这也就JUnit中所谓的TestSuite。 
2. 定义测试代码。这也就是JUnit中所谓的TestCase,根据源代码的测试需要定义每个TestCase,并将TestCase添加到相应的TestSuite方便管理。 
3. 定义测试环境。在TestCase测试前会先调用“环境”配置,在测试中使用,当然也可以在测试用例中直接定义测试环境。 
4. 检测测试结果。对于每种正常、异常情况下的测试,运行结果是什么、结果是否是我们预期的等都需要有个明确的定义,JUnit在这方面提供了强大的功能。

以上部分与我们平常使用IDE调试的过程是完全一样的,只不过是增加了测试用例管理、测试结果检测等功能,提高了单元的效率,保证了单元测试的完整性,明确了单元测试的目标。

一、测试用例:

 1 package can.test;
 2
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import junit.framework.TestCase;
 6
 7 public class SampleTest extends TestCase {
 8
 9         protected void setUp() {
10                 /* 开始test前的准备操作:初始化,获取数据连接... */
11
12         }
13
14         protected void tearDown() {
15                 /* 完成test后的清理工作:关闭文件, 关闭数据连接... */
16
17         }
18
19         public void testEmpty() {
20                 /* test case 1*/
21                 Collection collection = new ArrarList();
22                 assertTrue(collection.isEmpty());
23         }
24
25         public void testCase2() {
26                 /* test case 2*/
27                 ArrayList emptyList = new ArrayList();
28                 try {
29                         Object o = emptyList.get(0);
30                         fail("Should raise an IndexOutOfBoundsException");
31                 } catch (IndexOutOfBoundsException expected) {
32                         assertTrue(true);
33                 }
34         }
35 }

1. 当需要进行test前后操作,则对setUp(), tearDown()这两个方法进行重写。

2. 每进行一个test case前后,都会调用setUp(), tearDown()。注意,不是一次调用setUp(), 然后进行多个test case,最后才调用tearDown()。而且选择test case的次序是不确定的。所以调用次序可能是:
     1  setUp()
     2  testYYY()
     3  tearDown()
     4  setUp()
     5  testXXX()
     6  tearDown()
     所以每个testcase不要存在数据上的前后联系。

3. 编译&运行

compile:  javac  -cp ../lib/junit.jar  can/junit/ SampleTest.java

run:  (文本界面)   java  -cp   .;../lib/junit.jar  junit.textui.TestRunner  can.junit.SampleTest

(图形界面)    java  -cp   .;../lib/junit.jar  junit.swingui.TestRunner  can.junit.SampleTest

如果提示can.junit.SampleTest not found,则注意命令中红色处,.表示把当前目录添加到classpath,便于junit能够在该目录找到can.junit.SampleTest

4. 加上main(可选)

如果你觉得每次都要在命令中指定文本界面或图形界面,有点麻烦,那可以添加一下代码到SampleTest类中:

import junit.framework.Test;
import junit.framework.TestSuite; 

        public static Test suite() {
                /* 添加SampleTest类到TestSuite*/
                return new TestSuite(SampleTest.class);
        } 

        public static void main(String args[]) {
                /* 指定文本界面*/
                junit.textui.TestRunner.run(suite());
        }

或者

public static void main(String args[]) {
                junit.textui.TestRunner.run(SampleTest.class);
        }

这样run: java  -cp  .;../lib/junit.jar    can.junit. SampleTest

二. 测试单元

当需要对多个类或者模块进行unit test的时候,我们都会写好每个类的testcase,然后写一个Suite来将它们串联起来。

 1 package can.junit;
 2
 3 import junit.framework.Test;
 4 import junit.framework.TestSuite;
 5
 6 public class SampleTestSuite {
 7
 8         public static Test suite() {
 9                 TestSuite suite = new TestSuite("Sample Tests");
10
11                 /* 逐一添加testCase类 */
12                 suite.addTestSuite(SampleTest.class);
13
14                 /* 逐一添加test suite(注意,这是递归调用的) */
15                 suite.addTest(AnotherTestSuite.suite());
16
17                 return suite;
18         }
19
20         public static void main(String args[]) {
21                 junit.textui.TestRunner.run(suite());
22         }
23 }

刚才说了,每进行一个test case,setUp()和tearDown()都会调用。而有的时候,在setUp()中相当耗费资源,我们想进行所有的test case仅调用一次setUp()和tearDown(),这样需要把TestSuite包装到TestSetup类中:

 1 import junit.framework.*;
 2 import junit.extensions.TestSetup;
 3
 4 public class AllTestsOneTimeSetup {
 5
 6         public static Test suite() {
 7
 8                 TestSuite suite = new TestSuite();
 9                 suite.addTest(SomeTest.suite());
10                 suite.addTest(AnotherTest.suite());
11
12                 TestSetup wrapper = new TestSetup(suite) {
13                         protected void setUp() {
14                                 oneTimeSetUp();
15                         }
16
17                         protected void tearDown() {
18                                 oneTimeTearDown();
19                         }
20                 };
21                 return wrapper;
22         }
23
24         public static void oneTimeSetUp() {
25                 // one-time initialization code
26         }
27
28         public static void oneTimeTearDown() {
29                 // one-time cleanup code
30         }
31 }

三. 其他

对于protected方法的test,可以把test case放在被test的类同一目录。

时间: 2024-10-08 11:15:55

JUnit3的作用的相关文章

[Java]Hibernate所需要的jar包和作用释义

hibernate 需要的jar包 1)hibernate3.jar: Hibernate的核心库,没有什么可说的,必须使用的jar包 2)cglib-asm.jar: CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包 3)dom4j.jar: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代  

Junit3与Junit4的区别

Junit4最大的亮点就是引入了注解(annotation),通过解析注解就可以为测试提供相应的信息,抛弃junit3使用命名约束以及反射机制的方法. /** * 被测试类 */ package com.stock.finance.service; import java.util.List; import java.util.zip.DataFormatException; import com.stock.finance.db.dao.TableCompanyDAO; import com.

JAVA、android中常用的一些jar包的作用

正文: 这里主要介绍的是hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进行取舍. 下载Hibernate,例如2.0.3稳定版本,解压缩,可以看到一个hibernate2.jar和lib目录下有22个jar包: hibernate2.jar: Hibernate的库,没有什么可说的,必须使用的jar包 cglib-asm.jar: CGLIB库,Hibernate用它来

@jsonignore的作用

作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响. 如下: package com.hzboy.orm; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.pe

配置虚拟域名,hosts文件起作用

快速打开hosts方法 开始->运行->system32->回车 当前路径文件夹drivers\etc\hosts hosts文件起作用,目前楼主知道有两个可能原因 1.刷新dns cmd里面运行 ipconfig /flushdns 2.没配置前访问了一次域名,配置完之后浏览器没重启.所以不起作用 重新启动浏览器或者换一个浏览器

Linux中的环境变量配置文件及其作用

登录相关的配置文件: /etc/profile 范围:对所有用户生效 作用: a.定义USER变量 b.定义LOGNAME变量 c.定义MAIL变量 d.定义PATH变量 e.定义HOSTNAME变量 f.定义HISTSIZE变量 g.定义umask值 i.调用/etc/profile.d/*.sh文件 /etc/profile.d/*.sh 范围:对所有用户生效 说明:这是一族sh文件,没个都会被调用 例如: /etc/profile.d/lang.sh 作用:调用/etc/sysconfg/

表单的作用

①input的作用分为:单选按钮.文本框.密码框.复选按钮.隐藏表单域.文本选择框.图片按钮.普通按钮.提交按钮.重置按钮 ②select的作用:可创建单选或多选菜单,含有<option>标签 在HTML5中的新属性:1.autofocus属性            值autofocus                     规定在页面加载后文本区域自动获得焦点: 2.disabled                        disabled                      

shell中各种括号的作用

小括号里是命令大括号是变量值   一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b

VMware Tools的安装及其作用(redhat5.5为例)

VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显卡和硬盘性能.以及同步虚拟机与主机时钟的驱动程序. 只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(不用再按ctrl+alt),且虚拟机屏幕也可实现全屏化. 在vm上安装完redhat系统后