首页 分析 JUnit 框架源代码

分析 JUnit 框架源代码

举报
开通vip

分析 JUnit 框架源代码分析 JUnit 框架源代码 分析 框架源代码JUnit 理解 码码架码码原理和码码模式框JUnit 年 月 日2009 5 31 本文码致地描述了 的代码码码~在展示代码流程 码的基码上~码码分析 的部码码代码的功能机制~在涉及相码码码模式的地方码合代码予以码明。外~分析码程码涉及内与并另 JUnit UML JUnit 等 码言的高码特征。Reflection Java 概述 在码码码码的码码理念深入人心的今天~在码码码码码域的核心地位日码码定。不码 将 作码默码的 集成码件~而且基于 的各码码码架...

分析 JUnit 框架源代码
分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 JUnit 框架源代码 分析 框架源代码JUnit 理解 码码架码码原理和码码模式框JUnit 年 月 日2009 5 31 本文码致地描述了 的代码码码~在展示代码 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 码的基码上~码码分析 的部码码代码的功能机制~在涉及相码码码模式的地方码合代码予以码明。外~分析码程码涉及内与并另 JUnit UML JUnit 等 码言的高码特征。Reflection Java 概述 在码码码码的码码理念深入人心的今天~在码码码码码域的核心地位日码码定。不码 将 作码默码的 集成码件~而且基于 的各码码码架也在码被泛码用~码得了框内广并JUnit Eclipse JUnit IDE JUnit 一致好码。目前介码 码籍文章码然码多~但大多是码码数 的具码用码~而码于体践 本身的机制原理~只是停留在架模码的码码次。框浅JUnit JUnit JUnit 本文容完全描述内 的码致代码码码~在展示代码流程 码的基码上~码码分析 的部码码代码的功能机制~在涉及相码码码模式的地方码合代码予以码明。外~分析码程码涉内与并另JUnit UML JUnit 及 等 码言的高码特征。Reflection Java 本文的码者码码码 的基本原理及各码码码模式有所了解~主要是面向事从 相码技码的码码、码码码码的人码。码于与 ~程序码也有好的借码作用。很JUnit Java C++C# 回码首 码介Junit 的念及用途概JUnit 是由 和 码的一码源的码元码码架。于白盒码码~只要待码码码承写个框它属将 码~就可以利用 的一系列机制码行便捷的自码码码了。JUnit Erich Gamma Kent Beck TestCase JUnit 的码码精码~易易用~但是功能却非常强大~码码因于部完善的代码码。学它内构 是著名的 之一~因此 中深深渗透了码展性码良的码码模式思想。 JUnit Erich Gamma GOF JUnit JUnit 提供的 既您写确运框来并可以码出码码码果明的可重用码元码码用例~也提供了码元码码用例成批行的功能。在已码码码的架中~用码可以码码三码方式码示码码码果~且码示的方式本身也是可码展API 的。 基本原理JUnit 一个 码码包含以下元素,JUnit 表 码码用例码成1. 码码代码部分码码代码部分码码工具部分 待码码码 A通码码展 TestCase 或者造 构TestSuit 方法一码码码行器;个运TestRunner,R~可以码码码形界面或文本界面 码码码码 写B 操作步码, 将 通码命令行方式或码形界面码码方式码码码 ~自码行码码~码示码果。运并B RR 中的码码模式码体JUnit 码码模式;,是一套被反码使用的、码人所知的分码码目的代码码码码码码码。使用码码模式是码了可重用和码展代码~增加代码的码码性和可性。码码模式的出码使代码的码制正工程众靠真Design pattern 化~成码码件工程的基石。 的《码码模式》一码首次码码模式提升到理码高度~之码范化。码码提出了将并将 码基本码码模式~其后~在可码用面向码象码件的码展码程中~新的码码模式亦不出码。断GoF 23 码件架通常定码了码用系的整码码和码象的码系等等码码~以便于具码用码码者能集中精力于码用本身的特定码码。因此~码码模式有助于码架码的理解~成熟的架通常使用了框体体构参数体框构框 多码码码模式~就是其中的码秀代表。码码模式是 代码的精髓~有码码模式~没代码无法到在小代码量下的高码展性。码上看~有三码码码模式在达体 码码中得到充分码~体JUnit JUnit JUnit JUnit 分码码 模式、模式以及 模式。Composite Command Observer 回码首一码码的个 程序码例JUnit 我码首先用一完整码例码明个来 的使用。由于本文的分析码象是 本身的码码代码~因此码码码码例的码化无妨。本部分引入《 》中一个 码码的码码码例~JUnit JUnit JUnit in Action HelloWorld 下文的整分析以码例子码基点~剖析个会 源代码的部流程。内JUnit 待码码码如下, 码 待码码代码1. 码码只有一个 方法~求浮点之和返回。即两个数add 下面介码码码代码部分~本文以 码码码码象~架码同。者码原码中的码码码做了一些修改~添加了一必然失码的码码方法构笔个 ~目的是码了演示码码失码码的 代码流JUnit3.8 JUnit4.0 testFailJUnit 程。 完整的码码码代码如下, 码 码码码代码2. TestCalculator 码展了 JUnit 的 TestCase 码~其中 testAdd 方法就是码 Calculator.add 方法的码码~在码码码始后由 它会JUnit 架码中提框从取出行。在 来运testAdd 中~Calculator 码被码例化~码入码码 并参数10 和 50~最后用 assertEquals 方法;基码 TestCase 提供,判断码码码 中码出。体来TestRunner 果码与会期是否相等。无码码码符合码期或不符合都在码码工具 码例行码果,运 码 码例行码果运3. 从运行码果中可码,码码通码;未码示,~而 码码失码。码形界面码果如下,testAdd testFail 码 码码码形码果4. 回码首 源代码分析JUnit 的完整生命周期分码 个运码段,初始化码段、行码段和码果捕捉码段。JUnit 3 码 的完整生命周期码;码看大码,5. JUnit 初始化码段;码建 及 ,Testcase TestSuite 码 的 函数代码6. JUnit main 初始化码段作一些重要的初始化工作~的入它口点在 的 方法。码方法首先码建一个 码例 。之后 函数体中主工junit.textui.TestRunner main TestRunner main aTestRunner作函数码 TestResult r = aTestRunner.start(args) 。 它数构体的函造代码如下 : 码 的 函数7. junit start(String[]) 我码可以看出~首先码命令行码行解析,参数参数“ ;等待模式~码码完码用码手码返回,、“ ~“ ;版本码示,。 参数个用于码码码方法。码是 提供码用码的Junit -wait ”-c ”-v ”-m JUnit 一非常码便个灵况会参数巧的码码功能~但是在一般情下~用码像本文前述那码在码名命令行~此码通码码句, testCase = args[i]; 将将码码码的全限定名码码 码量 。String testcase 然后通码, Test suite = getTest(testCase); 将码 持有的全限定名码行解析~造并构 。testCase TestSuite 码 方法函数源代码8. getTest() 的造分码构两况情 如上码 ,TestSuite ( ) ,用码在码码码中通码明声 方法自定码 。•ASuite() TestSuite ,自码判断并提取码码方法。•BJUnit 提供码用码码造码码集合的方法~用码可以自行码码定码码码化的两构既构 集合~也可以码 框它构运个架自码码建码码集合~码码码码融合其功能~码码码的建、行、反码三码程完全JUnit TestCase JUnit 无码一化。体 情况 ,A 码 自定码 流程码9. TestSuite 当 方法在 中定码码~码建一码式的个 ~它 suite test case JUnit test suite利用 Java 码言的 Reflection 机制出名码找SUITE_METHODNAME 的方法~ 也 即suite 方法, suiteMethod = testClass.getMethod(SUITE_METHODNAME, new Class[0]); 是 的高码特征之一~借助 的 能直接在代码中码码码取到码的码言码程码面的信息~如码所包含的所有的成码名、成码性、方法名以及方法性~而且码可属属Reflection Java Reflection API 以通码得到的方法码象~直接码用码方法。 源代码码繁使用了 机制~不码充分码码了 码言在系码码程 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 下的超凡能力~也使 能在用码自行码的码码码中写游刃有JUnit Reflection Java JUnit 余地分析提取各码性及代码~而其码码架并属它框极需要付出码大的码码性才能得到等价功能。 若 无法到找 方法~码抛出常~流程码入异况情 代码~若找到~码码用码提供的 方法码行外部特征码码~判断是否码码方法。最后~自码码用码方法~造用码构指定JUnit siute B suite JUnit 的 ,TestSuite test = (Test)suiteMethod.invoke(null, (Object[]) new Class[0]);情况 ,B 码 自码判断并提取 流程码10. TestSuite 当 方法未在 中定码码~自码分析码建一个 。suite test case JUnit test suite 代码由 , return new TestSuite(testClass); 码码入 方法码 码的造方法~能自码分析构它 所描述的码的部有些方法内哪并构需要码码~加入到新造的 中。代码如下,TestSuite(Class theclass) TestSuite theclass TestSuite 码 函数代码11. TestSuite 采用了码码模式。在码模式下~可以将 比作一码~码中可以包含子码;其棵它 ,~也可以包含子叶 ~以此向下码码~直到底码TestSuite Composite TestSuite TestSuite(TestCase)全部落码到子码叶止。 采用 模式码码码码集合的部码~使得所有分内构散的 能码码一集中到一或个个若干 中~同码的 在码中占据同等JUnit Composite TestCase TestSuite TestCase 的位置~便于码一行码理。外~运另构构采用码码码使码码集合码得了无限的码充性~不需要重新造码码集合~就能使新的 不加入到集合中。断TestCase 在 码的代码中~可以到,找TestSuite private Vector fTests = new Vector(10); 此码码部码码的即内“子码或码叶”的列表。 码的代码完成提取整码码承系上的码码方法的提取。框内个体循码码句由 码型的码例 码始~逐码向父码的码承码构追溯~直到码码 码~并将沿途各码父码中所有合法的 Class theClass Object 方法都加入到 中。testXXX() TestSuite 合法 的判断工作由,testXXX addTestMethod(methods[i], names, theClass) 完成~码码上码方法码把判断成功的方法码化码 码象~加入到并 中。代码如下码 TestCase TestSuite : 码 函数代码12. addTestMethod 首先通码 利用 码得 码象 的方法名~用于特征判断。然后通码方法String name= m.getName(); Refection API Method m isTestMethod;Method m, 中的 return parameters.length == 0 && name.startsWith("test") && returnType.equals(Void.TYPE); 来判码方法名是不是以字符串“ 码始。test ” 而代码, if (names.contains(name)) return; 用于在逐码追溯码程中~防止不同码码父码中的 方法重码加入 。testXXX() TestSuite 码于符合件的条 方法~方法中用码句,testXXX() addTestMethod addTest(createTest(theClass, name)); 将 方法码化码 ~加入到并 。其中~方法接受 接口码型的~其部有参数内 方法和 方法~码接口被 testXXX TestCaseTestSuite addTest Test countTestCases run TestSuite 和 同码码码。码是 码码模式精神的码~体TestCase Command 模式码用操作的码象如将与耦运何码码码操作的码象解。在行码~或 被作当 命令码象~可以像一般码象那码码行操作和码展~也可以在码码 Command TestCase TestSuite Test 模式码多命令码合成一命令。外~增加新的命令将个个另离响与十分容易~隔了码有码的影~今后~也可以码忘码模式码合~码码 等高码功能。Composite undo 加入 的 由 方法码建~代码如下,TestSuite TestCase createTest(theClass, name) 码 函数代码;码看大码,13. CreateTest 和 都有一个码例码量~是在其后的码码行及码果返回码运段中码 的唯一码码~码 来码~一般也是要码码的方法名。在 方法中~码TestSuite TestCase Test TestCase fNamecreateTest 码方法被码化成一个 码例~通码,并TestCase ((TestCase) test).setName(name); 用码方法名码码 。其中~码象也是通码 机制~通码 构建的,TestCase test Refection theClass test = constructor.newInstance(new Object[0]); 注意,是码 中 方法的 字符串所造的构 码码例~而后者其码是命令行码入的码码码码参数 ~码承了它 方法。因此~theClass 8 getTest suiteClassName Class CalculatorTestCase 完全具码码化的件。条theClass 至此整流程的个初始化完成。 码码码码行码运运段;行所有 型的码码方法,TestXXX 由码 所示 我码可以知道初始化完码~即 码建好后 便码入方法 7 , testsuit() , :doRun(suite, wait); 代码如下 : 码 函数代码14. doRun 码方法码码码的码码行部分~码如下,运构 码建 码例。TestResult • 将 的码器听 加入到 的码器列表中。听•junit.textui.TestRunner fPrinter result 其中~是 码的码例~码码提供了向控制台码出码码码果的一系列功能接口~码出的格式在码中定码。 码码码了 接口~具码体fPrinter junit.textui.ResultPrinter ResultPrinter TestListener 码了 、、和 四个重要的方法~码码码码是 码码模式的码~在体 方法的代码中,addErroraddFailureendTest startTest Observer addListener public synchronized void addListener(TestListener listener) { fListeners.addElement(listener); } 将 码象加入到 码象的码器列表中~因此码码上听 码象可以有多码器码示码码码果。个听将会听第三部分分析中描述码码器的消息更新。ResultPrinter TestResult TestResult 码码码始。• 码码行。运•run(result) 码码码束。• 码一码出~包括码码码果和所用码码。• 其中最码重要的步码码 方法~代码如下。run(result) 码 函数代码15. run 通码 码 中的整个“码码构”码码遍码行其中的码点和子。此码运叶 代码码具码服力Junit TestSuite JUnit for (Enumeration e= tests(); e.hasMoreElements(); ){ …… }地码明了 模式的效力~接口方法的抽象具有重大意码~码码了它与构耦来构从客码代码码码码象容器码的解~码码象容器自己码码自身的码码码~而使得客码代码就像码理码码码象一码Composite run 来码理码码的码象容器。每次循码得到的码点 ~都同 一起码码码 方法~码行下一步更深入的行。运testresult runTest 码 函数代码16. junit.framework.TestResult.run 码里码量 指向一码码了个 接口的匿名码的码例~接口只有一个 待码码方法。而 P Protectable Protectable protect junit.framework.TestResult.runProtected(Test, 方法的定码码,Protectable) public void runProtected(final Test test, Protectable p) { try { p.protect(); } catch (AssertionFailedError e) { addFailure(test, e); } catch (ThreadDeath e) { // don't catch ThreadDeath by accident throw e; } catch (Throwable e) { addError(test, e); } } 可码 方法码码上是码用了码码码码的 方法~也就是码用了 方法。外~码另里的 和 方法也是 码码模式中的重要两个runProtected protect test.runBare() startTest endTest Observer 的消息更新方法。 以下分析 方法,junit.framework.TestCase.runBare() 码 函数代码17. junit.framework.TestCase.runBare() 在码方法中~最码的码码码码码一会个 方法码行~注意此码的 方法是无的~参与区注意之前形似的方法码。码方法中也出码了码典的 方法和 方法~追溯runTest runTest setUp tearDown 代码可知码的定码码它两空。用码可以覆盖者~码行一些 的自定码和搭建。 注意,放在了 中~在码码常异会它运抛出后仍被码行到~因此是被保码行的。 fixture ( tearDown finally{} )主工作码是在体 方法中 代码如下 junit.framework.TestCase.runTest() , : 码 函数代码18. junit.framework.TestCase.runTest() 码方法最根本的原理是,利用在码 中码定的 ~借助 机制~从 中提取码码方法,13 fNameReflection TestCase runMethod = getClass().getMethod(fName, (Class[]) null); 码每一码码方法~码个个建一方法码象 并码用,runMethod runMethod.invoke(this, (Object[]) new Class[0]); 只有在码里~用码码码方法的代码才码始被行。运 在码码方法行码~多的运众 方法会况异根据码码的码码情~抛出失码常或者码码。也是在“ 码里~码些常或码码异往上逐码抛Assert runMethod.invoke(this, (Object[]) new Class[0]); ” 出~或者被某一码次码理~或者码理后再次抛出~依次码推~最码码示码用码。 流程码如下 : 码 码行码码方法~在码码码并将束后失码和码码信息通知所有 19. JUnit test listener 码码码果捕捉码段;返回 或 并码示,Fail Error 通码以下代码~我码可以看出失码由第一个 子句捕码~并交由 方法码理~而码码由第三个 子句捕码~并交由 方法码理。catch addFailure catch addError 码 失码码理函数代码20. 码 失码码理流程码21. 码行码码方法~在码码码并将束后失码和码码信息通知码所有的 。其中 、、、是 接口的四大方法~而 JUnit test listener addFailureaddErrorendTeststartTest TestListener 涉及到 码码模式。TestListener Observer 我码码码看看 方法的代码,addFailure 码 方法的代码22. addFailure 此码代码码将生的失码码象加入到了 ~可码系 码 ~此码的码果在程序退出码作码码码码成功或失码的体断判依据。而在 循码中~码象循码遍码码察者;码器,列表~通码听fFailures2for TestResult 码用相码的更新方法~更新所有的码察者信息~码部分代码也是整个 码码模式架的重要部分。构Observer 根据以上描述~采用 码码模式使得 与众听多码码码果码器通码接口 达耦到松合~使 可以支持不同的使用方式。目码码象JUnit Observer TestResult TestListenner JUnit ;,不必码心有多少码象码自身注册它~只是根据列表通知所有码察者。因此~不用更改自身代码~而码易地支持了码似于 码码码器的无听限码充。目TestResultTestResult ResultPrinter 前~已有文本界面、码形界面和 集成码件三码码器~用码完全可以码码听听符合接口的更强大的码器。Eclipse 出于安全考码~使用克隆机制取出码器列表,听cloneListeners() private synchronized Vector cloneListeners() { return (Vector)fListeners.clone(); } 的 码一步码用 的 TestResult addFailure ResultPrinter addFailure: 码 的 函数代码23. ResultPrinter addFailure 码里并没将有码码信息码出~而只是码出了码码码型,“ 。码码信息由码 中的,F “14 fPrinter.print(result, runTime); 码一码出。 码些码码码码皆可以由 的码码者自己掌握。TestRunner 回码首码码 码于 目前在码码码域的码赫地位~以及 码码代码本身码的码码码码性~本文的码分析无码码于码码码码的码用、基于写与尽践运 的高码架的码、以及码码模式框写与 码言高码特征的JUnit JUnit JUnit Java 学码都具有多面的重要意码。 参考码料 学码 “反模式”;~年 月,,介码一些常码的 反模式~码明如并决它何解码。• JUnit developerWorks2005 8 JUnit “深入探索 ;~年 月,,码程包教几个括在 下行的码码码例~以及如运何在码早的 版本中行运 的指码。• JUnit 4”developerWorks2007 3 Eclipse Ant JUnit 4 “码元码码利器 ;~年 月,,本文主要介码了如何使用 提供的各码功能码展有效的码元码码~通码一码例演示了如并个何使用 码• JUnit 4”developerWorks2007 2 JUnit 4 Ant 行自码化的码元码码。 “探索 新特性”;~年 月,,本文通码理码分析和码码例子向码者码述 所码的最新特性。来 JUnit 4.4 developerWorks2008 9 JUnit 4.4 • 技码码区,可以到找几百篇码于 码程的各方面的文章。个 • developerWorks J ava Java 码码 参与 并加入 社区。•developerWorks blogs developerWorks 作者码介 何正码~IBM 中系码技码码码国与室的码码码件工程码。他目前工作的主要码域是 WebSphere 码用程序服码器码码和码码~擅码于 Eclipse 架的码码和构码码。 徐码~IBM 中系码技码码码国与室的一名码件工程码。 他目前的工作主要致力于 system X 码化码虚决品和解方案的码码码码。
本文档为【分析 JUnit 框架源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_215732
暂无简介~
格式:doc
大小:373KB
软件:Word
页数:22
分类:交通与物流
上传时间:2017-10-17
浏览量:22