Junit使用说明之二---Junit3.x的测试环境初始化以及收尾工作

来源:互联网 发布:股票数据 开放api 编辑:程序博客网 时间:2024/05/21 10:45


        看到这个标题,很多人可能会疑惑。首先我来解释一下,什么叫测试环境初始化,它是指:在进行测试之前,将必要的数据进行准备。收尾则是对资源进行回收等操作。比如我们以I/0为例,假如现在有N个方法,然后以不同的文件对文件进行读取,打印其中的内容,并确定耗时,以完成这几种方式效率的对比。每次开始前,我们要得到系统当前时间,测试完以我们也要打印当前时间。这时,我们当然也可以在每个测试方法,开始和结束的地方进行打印,但是如果这些方法的个数很多,每个测试方法我们都要去修改,是不是很麻烦列?  那么这个时候你想到了什么? 面向切面编程AOP?是吗?


     假如,每个测试方法在执行前都是会先执行一个指定的方法,在执行完毕后又会执行另外一个指定的方法,我们是不是就会省事列?还是那句话:你永远不会是第一个发现问题的。所以Junit提供了这种功能。


     怎么做列?那就是重写TestCase的setUp()和tearDown()。setUp()进行的也就是我这里说的:初始化工作,而tearDown()进行的则是,我这里说的收尾工作。还是基于昨天的那个例子,假设我们要在测试开始前打印一句话,测试后,又打印一句话,该怎么写?来我们看代码说话:

import junit.framework.TestCase;public class MyTestCase extends TestCase{@Overrideprotected void setUp() throws Exception {// TODO Auto-generated method stubSystem.out.println("befor test ....");}@Overrideprotected void tearDown() throws Exception {// TODO Auto-generated method stubSystem.out.println("after test");}public void testAddition(){assertEquals(5,MathTool.addition(2, 3));}}

Run as Junit 一下,看打印结果:

befor test ....after test

         那么现在有一个问题,假设我们有个多测试方法,那么setUp()和tearDown()会执行多少次列?让我们稍微修改一下代码,加多一个测试方法。修改后的代码如下:

import junit.framework.TestCase;public class MyTestCase extends TestCase{@Overrideprotected void setUp() throws Exception {// TODO Auto-generated method stubSystem.out.println("befor test ....");}@Overrideprotected void tearDown() throws Exception {// TODO Auto-generated method stubSystem.out.println("after test");}public void testAddition(){assertEquals(5,MathTool.addition(2, 3));}public void testMoreTest(){System.out.println("这是第二个测试");}}

再Run as Junit一下,看下测试结果:


befor test ....after testbefor test ....这是第二个测试after test

现在应该一目了然吧,每个测试方法执行前,和执行都,Junit都会给你进行初始化工作和收尾工作。这样在很大程度上减轻了,我们代码书写量,有些同学可能会问,他是怎么实的列? 对不起,我滑看源码,我也不想去看,但凭经验来说,应该是反射+代理来实现。 至于具体怎么实现的,有兴趣的同学可以自己看源码,至于我,宁愿当他是个奇妙的事。

      关于TestSuit 在第一章中已经提及过,我没打算讲它。有兴趣的朋友可能自己查一下。至此,对3.x的介绍我想应该就划上一个句号。在接下来的一章开始,将讲解Junit4.0的新特性-----纯POJO的,基于注解的测试用例。