JUnit3的作用
1. 管理测试用例。修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试。这也就JUnit中所谓的TestSuite。
2. 定义测试代码。这也就是JUnit中所谓的TestCase,根据源代码的测试需要定义每个TestCase,并将TestCase添加到相应的TestSuite方便管理。
3. 定义测试环境。在TestCase测试前会先调用“环境”配置,在测试中使用,当然也可以在测试用例中直接定义测试环境。
4. 检测测试结果。对于每种正常、异常情况下的测试,运行结果是什么、结果是否是我们预期的等都需要有个明确的定义,JUnit在这方面提供了强大的功能。
package can.test; import java.util.ArrayList;
import java.util.Collection;
import junit.framework.TestCase; public class SampleTest extends TestCase { protected void setUp() {
/* 开始test前的准备操作:初始化,获取数据连接... */ } protected void tearDown() {
/* 完成test后的清理工作:关闭文件, 关闭数据连接... */ } public void testEmpty() {
/* test case 1*/
Collection collection = new ArrarList();
assertTrue(collection.isEmpty());
} public void testCase2() {
/* test case 2*/
ArrayList emptyList = new ArrayList();
try {
Object o = emptyList.get(0);
fail("Should raise an IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException expected) {
assertTrue(true);
}
}
}
1. 当需要进行test前后操作,则对setUp(), tearDown()这两个方法进行重写。
1 setUp()
2 testYYY()
3 tearDown()
4 setUp()
5 testXXX()
6 tearDown()
所以每个testcase不要存在数据上的前后联系。
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);
}
package can.junit; import junit.framework.Test;
import junit.framework.TestSuite; public class SampleTestSuite { public static Test suite() {
TestSuite suite = new TestSuite("Sample Tests"); /* 逐一添加testCase类 */
suite.addTestSuite(SampleTest.class); /* 逐一添加test suite(注意,这是递归调用的) */
suite.addTest(AnotherTestSuite.suite()); return suite;
} public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}
刚才说了,每进行一个test case,setUp()和tearDown()都会调用。而有的时候,在setUp()中相当耗费资源,我们想进行所有的test case仅调用一次setUp()和tearDown(),这样需要把TestSuite包装到TestSetup类中:
import junit.framework.*;
import junit.extensions.TestSetup; public class AllTestsOneTimeSetup { public static Test suite() { TestSuite suite = new TestSuite();
suite.addTest(SomeTest.suite());
suite.addTest(AnotherTest.suite()); TestSetup wrapper = new TestSetup(suite) {
protected void setUp() {
oneTimeSetUp();
} protected void tearDown() {
oneTimeTearDown();
}
};
return wrapper;
} public static void oneTimeSetUp() {
// one-time initialization code
} public static void oneTimeTearDown() {
// one-time cleanup code
}
}
JUnit3的作用的更多相关文章
- Junit3与Junit4的区别
Junit4最大的亮点就是引入了注解(annotation),通过解析注解就可以为测试提供相应的信息,抛弃junit3使用命名约束以及反射机制的方法. /** * 被测试类 */ package co ...
- JAR包介绍大全用途作用详解JAVA
jta.jar 标准JTA API必要commons-collections.jar 集合类 必要antlr.jar ANother Tool for Language Recognition 必要 ...
- java项目中.classpath,.settings,.project,mymetadata文件的作用
今天犯了一个错误,误修改了本地的.classpath文件,导致项目好多地方报错,之前也没有仔细的研究过项目中的一些生成文件的作用. 今天特此进行记录. 不管我们在eclipse中新建任何的Java项目 ...
- Hibernate3 jar包的作用[转]
from:http://nopainnogain.iteye.com/blog/761630 (1)hibernate3.jar: Hibernate的核心库,没有什么可说的,必须使用的jar包 (2 ...
- JAVA、android中常用的一些jar包的作用
正文: 这里主要介绍的是hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进 ...
- jar包作用
hibernate中jar包的作用 (1)hibernate3.jar:Hibernate的核心库,没有什么可说的,必须使用的jar包 (2)cglib-asm.jar:CGLIB库,Hibernat ...
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- if __name__== "__main__" 的意思(作用)python代码复用
if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog http://www.dabu.info/if-__-name__ ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
随机推荐
- Bootstrap <基础十二>下拉菜单(Dropdowns)
Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
- 设计模式(2)--单例模式(Singleton Pattern)
概述 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称):当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的 ...
- ThinkPHP模板中如何操作session,以及如果session中保存的是数组的情况
在ThinkPHP的模板中操作session时,可以参考ThinkPHP参考文档中的“模板—>系统变量”部分,在默认模板引擎中,语法如下: {$Think.session.user} //输出s ...
- Fragment中的onKeyDown事件让Activity处理--处理特殊按键比如移动终端扫描
一些特殊按键事件需要在Activity中处理public void onKeyDown(int keyCode, KeyEvent event){ //让Activity处理 getActivity( ...
- MVC WebAPI中响应客户端请求返回图片
// GET api/values public HttpResponseMessage Get() { Image img = GetImage(); MemoryStream ms ...
- 兼容性测试-如何使用IE11做低版本IE的兼容性测试
操作步骤: 切换模式方法-按F12->展开显示->仿真菜单>在文档模式下拉框中选择IE版本
- 安全协议系列(四)----SSL与TLS
当今社会,电子商务大行其道,作为网络安全 infrastructure 之一的 -- SSL/TLS 协议的重要性已不用多说.OpenSSL 则是基于该协议的目前应用最广泛的开源实现,其影响之大,以至 ...
- java 转换流
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节.它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集. imp ...
- 谈谈黑客攻防技术的成长规律(aullik5)
黑莓末路 昨晚听FM里谈到了RIM这家公司,有分析师认为它需要很悲催的裁员90%,才能保证活下去.这是一个意料之中,但又有点兔死狐悲的消息.可能在不久的将来,RIM这家公司就会走到尽头,或被收购,或申 ...
- JS总结 本地对象1
Data对象 用于获取当前时间的对象 例如,要用该对象输出: 2016年9月7日 10:57 星期三 这样格式的时间 var time=new Date(), month=time.getMon ...