junit简单总结

这两天花了点时间把junit的源码看了看,把看后的想法总结在这里,说实在的junit的内容真很少,但是确有这么大的影响里,呵呵,只能说它
做的对了。
  因为我比较懒,而且对swing的东西不是太熟悉,所以我只看了junit.framework.*,junit.runner.*,junit.extensions.*,junit.textui.*,我想
这样也就差不多了。
  我先大体的说说,首先你生成一个runner,这个runner调用run方法,run的参数是个suite对象,run方法最终会调用suite的run方法,run方法会将调用
信息写到TestResult中(Colleting Parameter),最后使用TestListener将TestResult中的信息打印出来,觉得过程还是很简单的。
  然后说说一个重要的部分就是Test,TestCase,TestSuite的关系,首先TestCase和TestSuite都实现了Test接口,这个接口中最重要的方法当然是
run,他们构成了composite模式 ,TestCase是leaf,而TestSuite就是composite,当你调用suite的run方法时他会迭代内部所有的Test(放在一个Vector中)调用相应的run方法
,而如果这个Test是一个TestCase类型的它就调用起相应名称的一个test**方法,而如果这个Test是一个TestSuite对象将对调用TestSuite的run方法
进而继续迭代调用其内部的Test,还有一点要说明的当你实现了一个TestCase对象,它只代表一个test**方法,就是构造函数传来的name参数对应的
方法,虽然你的所有测试方法都写在一个TestCase的子类中,但是一个对象只对应一个test**方法.
  接着我要说的就是assert,我们知道test**方法中就是一些asert**方法,可以说测试方法的单元就是这些断言,看过源码后会觉得它的实现相当的简单
就是测试是否满足一定的条件,如果不满足则抛出AssertionFailedError,不知道为什么老大要用Error也许是这样写程序方便,不用随时捕获它吧
如果抛出异常则会封装成TestFailure存到TestResult中(而且也要存到TestListener中).
  junit.runner.*是测试用例运行时需要的环境,这里包括最重要的BaseTestRunner,几个自定义的ClassLoader,几个TestCollector,一个快速排序的助手类
还有一些无关紧要的东西。
  junit.extensions.*中时一些对TestSuite的扩展类它们为某些需求提供了快速实现。
  junit的实现很简单就是用了些反射,同步,还有一些面向对象的技巧,但是它提供了一个runner,为测试代码创建了一个运行环境,这个倒是
个不错的想法,好像sun对容器的使用是很常规的思想,总之要比在manin函数中粗糙的测试要好的多,但我觉得也没有必要神话它吧,起码我觉得
可以作出比他更好的东西,不过简单也的确是它快速推广的原因。

package lq.mytest.test;   
  
import junit.framework.*;   
  
public class KkTest extends TestCase{   
    public KkTest(); {}   
       
    public KkTest(String name); {   
        super(name);;   
    }   
       
    public void setUp(); {   
    }   
       
    public void teatDown(); {   
    }   
       
    public void testA(); {   
        assertEquals(1, 1);;   
    }   
       
    public void testB(); {   
        assertTrue(true);;   
    }   
       
    public static TestSuite suite(); {   
        //将KkTest类中的所有test方法加到suite中   
        //TestSuite suite = new TestSuite(KkTest.class);;   
           
        TestSuite suite = new TestSuite();;   
           
        //使用内省调用testA();   
        suite.addTest(new KkTest("testA"););;   
           
        //使用匿名内部类,重写了runTest方法,直接调用testB方法,而   
        //不用内省,这样是一种提高效率的方法   
        suite.addTest(new KkTest("testB"); {   
            public void runTest(); {   
                testB();;   
            }   
        });;   
           
        return suite;   
    }   
       
    public static void main(String[] args); {   
        //测试全部   
        //junit.textui.TestRunner.run(KkTest.class);;   
        junit.textui.TestRunner.run(suite(););;   
    }   
}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值