`

junit简单总结

    博客分类:
  • j2se
阅读更多

这两天花了点时间把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(););;   
    }   
}  

 

分享到:
评论

相关推荐

    分析JUnit框架源代码

    本文内容包括:概述Junit简介一个简单的JUnit程序实例JUnit源代码分析总结参考资料本文细致地描述了JUnit的代码实现,在展示代码流程UML图的基础上,详细分析JUnit的内部实现代码的功能与机制,并在涉及相关设计模式...

    SpringBoot实战:整合jUnit测试框架

    开发项目单元测试必不可少,而jUnit也是java中非常优秀的测试框架,现在简单实战总结一下SpringBoot如何整合jUnit测试框架。 二、添加依赖 在SpringBoot中使用jUnit单元测试前,需要先添加如下maven依赖,其中 test ...

    Android单元测试之–没有JDK而如何运行JUnit

    因此,我在这里对此内容做一下梳理和总结:在Java下做单元测试必然用到JUnit。这里说的JUnit是指从Apache基金会下载的junit.jar里提供的一系列单元测试功能。这些功能显然是运行在JDK之上的。在Andr

    最简单的SSM框架,Maven+idea(适合新手)

    总结了在网上看到的几篇ssm教程,希望有一份自己自己的框架能够随时使用,并且是最简单的。所以在这里没有附加上log4j和junit,需要的同学可衣看其他教程,我这边就是要搭建一个最简单的ssm项目,方便以后能够再次...

    Android上的单元测试

    因此,我在这里对此内容做一下梳理和总结:JUnit还能用么?在Java下做单元测试必然用到JUnit。这里说的JUnit是指从Apache基金会下载的junit.jar里提供的一系列单元测试功能。这些功能显然是运行在JDK之上的。在...

    Struts+Spring+Hibernate整合详解与典型案例源代码.

    工具详尽:包括JDK、Tomcat、Eclipse、MySQL、Log4j、Ant、JUnit、CVS、解析XML文件等; 由浅入深:每章从简单示例入手,最后给出一个详细示例加深理解; 实战性强:书中提供了大量典型的应用案例,实战性很强; ...

    基于lucene的搜索引擎总结

    assertEquals(“JUnit test”, 1, hits.length()); Lucene的线程安全性 不允许使用多个IndexWriter或IndexReader实例同时对一个索引进行修改 IndexWriter和IndexReader是线程安全的,可以被多线程共享 全文索引/...

    evaluator:用于成绩评估的简单 Web 应用程序

    作者:Marius Bogoevici、Tejas Mehta、Joshua Wilson 级别:中级技术:JSP、JPA、JSON、Spring、JUnit 总结:一个融合多种技术的例子目标产品:WFK 产品版本:EAP 6.1、EAP 6.2、WFK 2.6 来源: : 它是什么? 这...

    Spring.3.x企业应用开发实战(完整版).part2

    3.2.1 简单实例 3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 ...

    Spring3.x企业应用开发实战(完整版) part1

    3.2.1 简单实例 3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或...

    iuhyiuhkjh908u0980

    持续集成简单总结 一、理论篇: 持续集成鼓励尽量短周期内项目团队的代码提交,同时保证每次check in都不会损害我们的构建通过。它跟每日构建的区别就在于代码提交频率更高(一般为一个小时),构建的频率也更高,...

    Spring中文帮助文档

    8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1...

    Spring API

    8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1...

    Java学习笔记-个人整理的

    {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}{24}{subsubsection.1.4.1.1} {1.4.2}格式化输出浮点数}{24}{...

Global site tag (gtag.js) - Google Analytics