JUnit3的使用
来源:互联网 发布:linux怎么更改root密码 编辑:程序博客网 时间:2024/06/02 00:52
简要说JUnit的4大功能
1. 管理测试用例。修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试。这也就JUnit中所谓的TestSuite。
2. 定义测试代码。这也就是JUnit中所谓的TestCase,根据源代码的测试需要定义每个TestCase,并将TestCase添加到相应的TestSuite方便管理。
3. 定义测试环境。在TestCase测试前会先调用“环境”配置,在测试中使用,当然也可以在测试用例中直接定义测试环境。
4. 检测测试结果。对于每种正常、异常情况下的测试,运行结果是什么、结果是否是我们预期的等都需要有个明确的定义,JUnit在这方面提供了强大的功能。
以上部分与我们平常使用IDE调试的过程是完全一样的,只不过是增加了测试用例管理、测试结果检测等功能,提高了单元的效率,保证了单元测试的完整性,明确了单元测试的目标。
一. 测试用例
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()这两个方法进行重写。
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来将它们串联起来。
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 } }
三. 其他
对于protected方法的test,可以把test case放在被test的类同一目录。
- JUnit3的使用
- junit3.8的使用
- junit3和junit4的使用区别
- 单元测试教程(一):Junit3的使用
- JUnit3.8使用简介
- JUnit3.81的设计
- JUnit3
- Junit3和Junit4使用区别
- JUnit3.8的初步学习
- JUnit3.8的Junit单元测试.
- junit3和junit4的区别
- JUnit3 与 JUnit4 的区别
- JUnit3 与 JUnit4 的区别
- Junit3和junit4的比较
- junit3与junit4的区别
- junit3和junit4的比较
- Java-测试框架之JUnit3和JUnit4使用区别的总结
- JUnit测试框架之JUnit3和JUnit4使用区别的总结
- AfxWnd42 qq2006中怎样取得发送消息窗口中的Richedit
- Android 一个URL开启手机浏览器
- DATASET结果集导入到EXCEL
- 修改aspx文件名后出错
- 链表(一)
- JUnit3的使用
- /etc/shadow字段详解
- Android应用程序的自动更新升级(自身升级、通过tomcat)
- presentModalViewController 设置动画效果
- 判断处理器是大端还是小端
- UVa 100 3n+1
- Oracle Tuning Log File Sync 等待事件的几种策略
- AfxFrameOrView42s
- swprintf_s 实现字符串的拼接