您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
JUnit 5系列:架構(gòu)體系
作者:Linesh林從羽 發(fā)布時(shí)間:[ 2016/12/21 15:44:06 ] 推薦標(biāo)簽:單元測(cè)試 軟件測(cè)試

  聽(tīng)起來(lái)怎樣,很酷吧。
  這部分架構(gòu)對(duì)于我們生態(tài)鏈前端的使用者來(lái)說(shuō)基本是透明的。我們的項(xiàng)目只需要引入一個(gè)用于編寫(xiě)測(cè)試的 API 依賴(lài),其余的組件讓工具去操心即可。
  API 生命周期
  現(xiàn)在來(lái)說(shuō)說(shuō)那些大家都在使用的內(nèi)部 API。JUnit 5 團(tuán)隊(duì)希望這個(gè)問(wèn)題也能得到解決,為此給 JUnit 的 API 設(shè)立了生命周期。這里,我將 源碼 中給出的部分解釋截取于此。
  內(nèi)部 API(internal)
  不允許被 JUnit 開(kāi)發(fā)者之外的任何人使用。這部分 API 可能被移除,并且不會(huì)事先通知。
  已過(guò)時(shí)(Deprecated)
  不應(yīng)該再被使用的 API,它們可能在下次小版本發(fā)布時(shí)被移除。
  實(shí)驗(yàn)階段(Experimental)
  為一些新的、實(shí)驗(yàn)階段的特性所使用的 API,這些新特性可能會(huì)或已經(jīng)被公開(kāi)使用并接受反饋中。
  可以使用,但要謹(jǐn)慎。這些 API 未來(lái)可能被提升至 維護(hù)中 或 穩(wěn)定 級(jí)別,但也可能不帶提前通知被移除。
  維護(hù)中(Maintained)
  使用該 API 的特性,至少在該大版本的下一個(gè)小版本發(fā)布時(shí)不會(huì)發(fā)生向后不兼容的改變。如果未來(lái)有移除維護(hù)中 API 的計(jì)劃,它會(huì)先被打回到 已過(guò)時(shí) 階段。
  穩(wěn)定(Stable)
  使用該 API 的特性,至少在下個(gè)大版本發(fā)布之前不會(huì)發(fā)生向后不兼容的改變。
  JUnit 對(duì)外公開(kāi)的類(lèi)都帶有一個(gè) @API(usage) 注解,其中 usage 是上面幾個(gè)值中的其中一個(gè)。團(tuán)隊(duì)希望這能給 API 的調(diào)用方以充足的信息,即他們所使用的 API 處于什么生命周期中,同時(shí),也希望給每個(gè)團(tuán)隊(duì)以自由,讓他們決定是否改變或移除過(guò)時(shí) API 。
  Open Test Alliance
  其實(shí)還有一件事。Junit 5 的體系結(jié)構(gòu)使得 IDE 和構(gòu)建工具能夠?qū)⑵渥鳛橹虚g層,以運(yùn)行所有類(lèi)型的測(cè)試框架(前提是該框架實(shí)現(xiàn)了其對(duì)應(yīng)的引擎)。這樣的話(huà),工具本身不需要去實(shí)現(xiàn)框架相關(guān)的測(cè)試支持,它們只需要使用一套統(tǒng)一的借口,即可實(shí)現(xiàn)測(cè)試發(fā)現(xiàn)、測(cè)試執(zhí)行和結(jié)果收集。
  是嘛,真的可以嗎?
  失敗的測(cè)試,通常使用異常來(lái)描述。但不同的測(cè)試框架和斷言庫(kù)之間并無(wú)一個(gè)統(tǒng)一的接口。相反,它們通常實(shí)現(xiàn)了各自不同的版本(常見(jiàn)的是繼承 AssertionError 或 RuntimeException )。這使得不同框架間的互操作變得更加復(fù)雜,也使得工具之間無(wú)法簡(jiǎn)單使用一套統(tǒng)一的接口。
  為了解決這個(gè)問(wèn)題,Junit Lambda 團(tuán)隊(duì)又分出來(lái)一個(gè)獨(dú)立的項(xiàng)目, The Open Test Alliance for the JVM 。這是它們的提議:
  基于 JUnit Lambda 團(tuán)隊(duì)近來(lái)與來(lái)自Eclipse、Gradle 及 Intellij 等 IDE 和構(gòu)建工具開(kāi)發(fā)者所展開(kāi)的討論,我們呼吁要建立這樣一個(gè)開(kāi)源項(xiàng)目:它用于提供一套基于 JVM的 測(cè)試庫(kù)與測(cè)試框架 間的小公共接口集。
  項(xiàng)目主要目標(biāo)是,為各測(cè)試框架(如 JUnit、TestNG、Spock 等)和三方斷言庫(kù)(Hamcrest、Assert 等)提供一個(gè)公共的異常集合。有了這個(gè)集合,IDE 和構(gòu)建工具可以一個(gè)統(tǒng)一的接口對(duì)所有測(cè)試過(guò)程——如對(duì)失敗斷言、失敗假言判定的處理、對(duì)測(cè)試執(zhí)行過(guò)程的可視化、在 IDE 中生成測(cè)試結(jié)果報(bào)告等——進(jìn)行處理。
  截止目前,該項(xiàng)目的呼吁似乎并未引起太多重視,或說(shuō)是基本未得到重視。如果你覺(jué)得這是個(gè)好的想法,你可以通過(guò)一些方式來(lái)支持,比如向你經(jīng)常使用的測(cè)試框架維護(hù)者發(fā)出聲音。
  回顧總結(jié)
  本篇我們介紹了 JUnit 5 的架構(gòu)設(shè)計(jì),它將原有的 API 分成了兩部分:編寫(xiě)測(cè)試部分的 API 和 執(zhí)行測(cè)試的引擎。這個(gè)引擎進(jìn)一步地被切分成三個(gè)部分:一個(gè)解析測(cè)試代碼的 API、一個(gè)測(cè)試執(zhí)行器(launcher),和一些支持不同測(cè)試框架的引擎實(shí)現(xiàn)。這樣開(kāi)發(fā)者只需要為項(xiàng)目引入 API 部分的依賴(lài)(用于編寫(xiě)測(cè)試),而測(cè)試框架的開(kāi)發(fā)者們則只需要實(shí)現(xiàn)引擎部分的 API(其他工作已經(jīng)由 JUnit 處理了),構(gòu)建工具方面也只需要實(shí)現(xiàn) launcher API以協(xié)調(diào)測(cè)試執(zhí)行。

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd