`
white182517
  • 浏览: 162804 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JUnit源码分析

    博客分类:
  • java
阅读更多

前言

JUnit框架通过几个接口就实现了一个灵活的测试框架,借研究Spring测试帮助类之机,重温一下。

主要接口<o:p> </o:p>

Test

        描述测试的接口,核心业务方法run(TestResult result)方法用来运行测试,并收集测试结果。

TestCase

        一个TestCase可以用来定义多个测试,框架支持两种方式运行一个测试,静态方式下,可以通过重写runTest方法,定义需要激活的测试方法,示例如下: 

java 代码
  1. TestCase test= new MathTest("add") {   
  2.   
  3.         public void runTest() {   
  4.   
  5.             testAdd();   
  6.   
  7.         }   
  8.   
  9. };   
  10.   
  11. test.run();   

         

        动态方式使用反射实现runTest,缺省实现要求在构建TestCase时指定需要测试的方法名称,示例如下:

java 代码
  1. TestCase test= new MathTest("testAdd");   
  2.   
  3.   test.run();   

         

        其run(TestResult result)方法会调用TestResultrun(Test test)方法,而TestResultrun(Test test)方法在做一些结果收集处理后,反过来再调用TestCaserunBare方法来进行实际的测试方法调用。

      runBare是一种模板方法模式的实现,子类可以通过重写setUp,tearDownrunTest方法提供相应的测试逻辑。

TestSuite

        一个TestSuite可以包含一个或多个TestCase,这是组合模式的实现。可以使用动态方式定义TestSuite,示例如下: 

java 代码
  1. TestSuite suite= new TestSuite();   
  2.   
  3.  suite.addTest(new MathTest("testAdd"));   
  4.   
  5.  suite.addTest(new MathTest("testDivideByZero"));   

        也可以通过构造函数静态定义

java 代码
  1. TestSuite suite= new TestSuite(MathTest.class);  

        两种方式都是通过反射机制,解析传递进来的测试类,将方法前缀为将方法前缀为test的公有方法构建成测试实例,并添加到缓存的集合中,运行时再依次遍历这些测试实例完成测试。

        TestSuiterun(TestResult result)方法是运行测试的主要入口。

TestResult

        TestResult主要用来收集测试结果,内部使用两个集合区分测试失败和测试错误情况,并包含一个监听器列表。Testrun(TestResult result)方法会将控制权转交给TestResultTestResult会捕获调用TestrunBare方法中的错误,并在测试启动和结束时通知监听器,如果对测试结果感兴趣,可以实现TestListener接口,这是监听器模式的实现。

TestListener

        测试监听器提供几个接口方法,用来对测试结果进行处理,如果对测试结果感兴趣,可以在调用Testrun(TestResult result)方法前,将测试监听器实例注册到TestResult实例。

<o:p> </o:p>

运行序列图

下面我们通过序列图来看看这几个接口之间是如何交互的,这里以TextRunner为例:

  1. TextRunner会从命令窗口中解析出需要测试的TestSuite实例,然后交给doRun方法处理。
  2. doRun方法首先构建一个TestResult实例。
  3. 然后调用TestSuiterun(TestResult result)方法。
  4. run(TestResult result)询问TestResultshouldStop方法判断调用者是否已经停止测试。
  5. 如果TestResultshouldStop返回false,将会遍历TestSuite的包含的每一个TestCase实例,重复执行如下步骤。
  6. 调用TestCaserun(TestResult result)方法。
  7. TestCaserun(TestResult result)委托给TestResultrun(Test test)方法。
  8. TestResultrun(Test test)方法会调用监听器的startTest方法通知测试开始,然后调用TestCaserunBare执行真正的测试,最后调用监听器的endTest方法通知测试结束。<o:p> </o:p>

扩展

        TestCaserunBare方法是实际执行测试的方法,该方法缺省构建一个模板方法实现。子类可以通过重写此方法提供自定义的实现,比如SpringConditionalTestCase就通过改写此方法提供条件化测试执行逻辑。

        JUnit自带的RepeatedTest类使用装饰器模式实现一个可重得执行的测试类扩展。<o:p> </o:p>

  • 大小: 52.9 KB
分享到:
评论

相关推荐

    Junit源码分析(圣思园)

    **Junit源码分析(圣思园)** Junit是Java编程语言中最广泛使用的单元测试框架,它使得开发者能够方便地编写和运行可重复的、可靠的测试用例。本篇文章将深入探讨Junit的源码,揭示其内部工作原理,帮助我们更好地...

    自定义junit源码

    自定义JUnit源码是一个对Java开发人员非常有帮助的主题,特别是对于那些想要深入理解测试框架工作原理或希望根据自身需求定制测试工具的开发者。JUnit是一个广泛使用的单元测试框架,它简化了编写和运行针对Java代码...

    对基于Junit的测试代码自动化生成的研究

    4. Junit源码分析:深入到Junit的源码层面,解释其核心组件和测试执行流程,为自动生成测试代码提供理论基础。 5. 实现策略:描述如何设计和实现一个自动化测试代码生成的系统,可能包括解析源代码结构,识别测试点...

    junit4 单元测试源码

    【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具...通过分析和运行这些源码,学习者可以掌握单元测试的基本概念,了解如何编写有效的测试用例,以及如何利用Eclipse的集成环境进行测试驱动开发。

    junit in action 源码

    10. **持续集成**:JUnit源码也揭示了如何将测试集成到持续集成(CI)系统,如Jenkins、Travis CI等,确保每次代码变更后都能自动运行测试并获取反馈。 总的来说,分析《JUnit in Action》的源码,不仅可以帮助我们...

    feed4junit源码

    它能够从业务分析人员定义好的CVS或 Excel文件读取测试用例数据并在构建/单元测试框架中报告测试成功。利用Feed4JUnit能够很方便用随机但校验过的数据执行冒烟测试来提高代码 代码覆盖率和发现由非常特殊的数据结构...

    Junit设计模式分析(带源码)

    本资源"Junit设计模式分析(带源码)"旨在深入探讨JUnit在设计上的模式和最佳实践,通过源码分析帮助开发者更好地理解和应用这个工具。 1. 单元测试基础: 单元测试是对软件中的最小可测试单元进行检查,如函数、...

    netbeans junit 源码

    2. **JUnit框架**:JUnit源码在NetBeans中的实现意味着我们可以看到如何在IDE内部封装和扩展JUnit的API。这可能涉及到对`@Test`注解的处理,以及如何触发测试执行和显示测试结果。 3. **事件监听和API调用**:...

    junit4测试源码

    通过分析和运行这些测试用例,我们可以了解如何编写有效的JUnit4测试,以及如何利用JUnit4提供的各种工具和特性来提高测试覆盖率和质量。 总之,理解和掌握JUnit4的源码对于Java开发者来说是至关重要的,它能帮助...

    javajunit源码-ant-java-junit:我的页面上的Java单元测试JUnit的源代码:http://jumpstartprog

    Java JUnit 源码分析 Java JUnit 是一个广泛使用的单元测试框架,它使得 Java 开发者能够方便地编写和执行针对代码功能的测试。JUnit 的核心在于它提供了断言(assertions)来验证代码行为,以及测试套件(test ...

    junit4 jar包以及源码

    同时,源码分析也有助于学习最佳实践和设计模式,提升自身的编程技能。 JUnit4的主要特性包括: 1. **注解驱动**:通过注解可以轻松地标识测试方法,如@Test表示测试方法,@Before和@After分别用于在每个测试方法...

    Springboot-junit项目源码

    SpringBoot-junit项目源码分析 SpringBoot是一个流行的Java框架,用于快速开发微服务和Web应用程序。它简化了Spring框架的配置,使得开发者可以更快地启动项目。JUnit是Java编程语言中最常用的单元测试框架,它使得...

    JUnit设计模式分析

    本篇将深入分析JUnit源码中的设计模式,帮助你理解其内在的架构原理,提升你的编程技能。 首先,JUnit的核心设计原则之一是“开闭原则”(Open-Closed Principle),它主张软件实体(类、模块、函数等)应对于扩展...

    Junit源码【肯特版】好像是4.几版忘了

    通过阅读和分析肯特参与编写的这部分源代码,我们可以更深入地了解JUnit的内部工作原理,学习如何设计和实现测试框架,以及如何通过注解和运行器优化测试流程。这对于理解单元测试的底层机制,提升测试效率,甚至...

    javajunit源码-java-junit-jenkins:使用Jenkins的CI的源代码-在我的页面上发布:http://jumpsta

    JavaJUnit Jenkins 源码分析 在 Java 开发过程中,单元测试是保证代码质量的重要环节,JUnit 是一个广泛使用的 Java 单元测试框架。而 Jenkins 是一个流行的持续集成(CI)工具,它可以帮助开发者自动化构建、测试...

    北京圣思园 junit全套笔记及源码

    【JUnit 框架详解】 JUnit 是一个广泛使用的 Java 编程语言的单元测试框架,由 Erich Gamma 和 Kent Beck 开发,它是 xUnit 家族的...结合源码分析,将帮助你更好地理解和应用这些概念,提升你的编程技能和代码质量。

    eclipse下利用ant、junit进行自动化测试例子源码

    6. **源码分析**:压缩包中的"testAntJunit"文件可能是包含了一个示例项目,这个项目演示了如何在Eclipse中设置ANT脚本和JUnit测试。通过查看源码,我们可以学习如何在代码中编写测试用例,以及如何在ANT构建文件中...

    JUnit设计模式分析及简化的JUnit代码

    JUnit是Java开发者进行单元测试的重要工具,由著名程序员Erich Gamma和Kent Beck共同创建,它遵循简洁、可扩展的原则,使得测试代码易于编写和维护。本文将深入探讨JUnit中的设计模式,以及如何通过理解这些模式来...

    JUnit -- 分析

    9. **源码分析**:可能深入到JUnit的源代码,解释其设计模式,如观察者模式、装饰器模式,以及JUnit如何处理测试失败和测试报告。 10. **实战示例**:结合实际项目,展示如何利用JUnit进行单元测试,解决实际问题。...

Global site tag (gtag.js) - Google Analytics