国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JUnit 5系列之架構體系介紹

開發 架構
現在,我們已經知道了 如何配置 JUnit 5 環境 及 如何寫一些測試,接下來就來看一點封面下的內容吧。本篇我們將討論 JUnit 5 的架構體系,以及它之成形如此的原因。

[[171833]]

現在,我們已經知道了 如何配置 JUnit 5 環境 及 如何寫一些測試,接下來就來看一點封面下的內容吧。本篇我們將討論 JUnit 5 的架構體系,以及它之成形如此的原因。

概述

本文章是這個 JUnit 5 系列的一部分:

(如果不喜歡看文章,你可以戳這里看我的演講,或者看一下最近的 vJUG 講座,或者我在 DevoxxPL 上的 PPT。

本系列文章都基于 Junit 5發布的先行版 Milestone 2。它可能會有變化。如果有新的里程碑(milestone)版本發布,或者試用版正式發行時,我會再來更新這篇文章。

這里要介紹的多數知識你都可以在 JUnit 5 用戶指南 中找到(這個鏈接指向的是先行版 Milestone 2,想看的***版本文檔的話請戳這里),并且指南還有更多的內容等待你發掘。下面的所有代碼都可以在 我的 Github 上找到。

目錄

  • JUnit 4
  • JUnit 5

* 分離的關注點

* JUnit 5 的重新組織

* 架構及體系

* API 生命周期

  • Open test alliance
  • 回顧總結
  • 分享&關注

JUnit 4

除了 Hamcrest,JUnit 4沒有任何外部依賴,其所有的功能都被打包在一個構件(artifact)中。這完全違反了單一職責原則,它被提供給開發者、IDE、構建工具、其他測試框架、其他擴展等使用,不同的使用者,依賴的都是一個同樣的構件。

而在這其中,只有開發者能——或者說曾經能——以最干凈的方法來使用它。他們通常只需要 JUnit 的公共 API,不需要管其他的。非常好。

但生態圈中的其他成分則不是這樣使用 JUnit:測試框架、擴展,特別是 IDE 和構建工具的開發者,他們需要深入到 JUnit 的深處,到它的細枝末節:非 public 的類、內部 API,甚至 private 字段。它們的正常工作極大地依賴于 JUnit 的實現細節。這使得 JUnit 維護團隊不能輕易地修改框架的這些內部實現,因此團隊的開發進度受到了很大的影響。

當然,這些工具的開發者們也并非有意為之。為了實現那些我們十分喜愛的特性,他們不得不使用內部的 API,因為 JUnit 4 并沒有提供相應的 API:一個強大到足以滿足工具開發者們需求的 API。

Junit Lambda 團隊開始著手于 JUnit 5 的開發,希望能讓這一切變得明朗起來。

JUnit 5

分離的關注點

退一步想,我們不難辨識出,這里至少有兩個不同的關注點需要分離:

  • 一個支持測試代碼撰寫的 API
  • 一個識別測試、運行測試的機制

再仔細思考一下第二點,我們可能會問,“哪些測試?”這個當然是指 Junit 測試。“我知道,但具體是哪些版本的測試呢?”呃…“還有,具體是指什么類型的測試?”好吧,你讓我給你……“只能跑那些老版本的 @Test 注解的測試么?有沒有其他新的方法來運行測試呢?……”行行行,都給我閉嘴!聽我講著。

為了進一步將待識別測試的類型 與 實際運行它們 這兩個關注點解耦,上面的第二點需要細分:

  1. 一個支持測試代碼撰寫的 API
  2. 一個識別測試、運行測試的機制

* 一個識別、運行特定類型(比如,JUnit 5測試的機制)

* 另一套協調上述機制的機制

* 上兩者之間的 API

JUnit 5 的重新的組織

識別出這兩個關注點以后,“作為平臺的 JUnit ”(用于運行我們的測試)和“作為工具的 JUnit ”(用于撰寫我們的測試)這兩個概念的分離就清晰了。為了完成這個徹底的分離,JUnit 團隊決定將 JUnit 5 分成三個子項目:

JUnit Jupiter

包含了我們用于撰寫測試的 API(關注點1),以及一個能理解測試代碼的引擎(關注點2.1)。

JUnit Platform

提供了一套統一的 API 以運行測試,及基于 API 之上的一套工具(關注點2.2和2.3)。

JUnit Vintage

提供了一套引擎,用以在 JUnit 5 中運行 JUnit 3 和 JUnit 4 的測試(關注點2.1)。

架構與體系

JUnit 5 的架構體系完全是遵循這個關注點分離思想的產物:

junit-jupiter-api(1)

開發者用于撰寫測試的 API,包含了我們在JUnit 5 的基礎知識一節中所提及的所有注解、斷言等。

junit-platgorm-engine(2.3)

包含了一套所有測試引擎都必須實現的 API。這樣,不同的測試引擎之間可以通過統一的接口被調用。引擎可以跑正常的 JUnit 測試,但也可以實現不同的引擎用以執行其他框架寫成的測試,如 TestNG、Spock、Cucumber 等。

junit-jupiter-engine(2.1)

junit-platform-engine API 的一個實現,專門用于執行 JUnit 5 撰寫的測試。

junit-vintage-engine(2.1)

junit-platform-engine API 的一個實現,專門用于執行 JUnit 3 或 JUnit 4 撰寫的測試。過去,JUnit 4 的構件 junit-4.12 充當了兩個角色:它既是開發人員用于實現測試的 API,又包含了用以執行測試的核心組件。這個引擎,可以認為是低版本的 JUnit 3/4 與 JUnit 5 之間的一個適配器。

junit-platform-launcher(2.2)

這部分使用了一個服務加載器 ServiceLoader 來發現測試引擎,并協調不同實現之間的執行。它提供了一個 API 給 IDE 和構建工具,使得它們能夠與測試執行過程交互,比如,運行單個的測試、搜集測試結果并展示等。

聽起來怎樣,很酷吧。

 

這部分架構對于我們生態鏈前端的使用者來說基本是透明的。我們的項目只需要引入一個用于編寫測試的 API 依賴,其余的組件讓工具去操心即可。

API 生命周期

現在來說說那些大家都在使用的內部 API。JUnit 5 團隊希望這個問題也能得到解決,為此給 JUnit 的 API 設立了生命周期。這里,我將源碼中給出的部分解釋截取于此。

內部 API(internal)

不允許被 JUnit 開發者之外的任何人使用。這部分 API 可能被移除,并且不會事先通知。

已過時(Deprecated)

不應該再被使用的 API,它們可能在下次小版本發布時被移除。

實驗階段(Experimental)

為一些新的、實驗階段的特性所使用的 API,這些新特性可能會或已經被公開使用并接受反饋中。

可以使用,但要謹慎。這些 API 未來可能被提升至 維護中 或 穩定 級別,但也可能不帶提前通知就被移除。

維護中(Maintained)

使用該 API 的特性,至少在該大版本的下一個小版本發布時不會發生向后不兼容的改變。如果未來有移除維護中 API 的計劃,它會先被打回到 已過時 階段。

穩定(Stable)

使用該 API 的特性,至少在下個大版本發布之前不會發生向后不兼容的改變。

JUnit 對外公開的類都帶有一個 @API(usage) 注解,其中 usage 是上面幾個值中的其中一個。團隊希望這能給 API 的調用方以充足的信息,即他們所使用的 API 處于什么生命周期中,同時,也希望給每個團隊以自由,讓他們決定是否改變或移除過時 API 。

Open Test Alliance

其實還有一件事。Junit 5 的體系結構使得 IDE 和構建工具能夠將其作為中間層,以運行所有類型的測試框架(前提是該框架實現了其對應的引擎)。這樣的話,工具本身就不需要去實現框架相關的測試支持,它們只需要使用一套統一的借口,即可實現測試發現、測試執行和結果收集。

是嘛,真的可以嗎?

失敗的測試,通常使用異常來描述。但不同的測試框架和斷言庫之間并無一個統一的接口。相反,它們通常實現了各自不同的版本(常見的是繼承 AssertionError 或 RuntimeException )。這就使得不同框架間的互操作變得更加復雜,也使得工具之間無法簡單使用一套統一的接口。

為了解決這個問題,Junit Lambda 團隊又分出來一個獨立的項目,The Open Test Alliance for the JVM。這是它們的提議:

基于 JUnit Lambda 團隊近來與來自Eclipse、Gradle 及 Intellij 等 IDE 和構建工具開發者所展開的討論,我們呼吁要建立這樣一個開源項目:它用于提供一套基于 JVM的 測試庫與測試框架 間的最小公共接口集。

項目主要目標是,為各測試框架(如 JUnit、TestNG、Spock 等)和三方斷言庫(Hamcrest、Assert 等)提供一個公共的異常集合。有了這個集合,IDE 和構建工具就可以一個統一的接口對所有測試過程——如對失敗斷言、失敗假言判定的處理、對測試執行過程的可視化、在 IDE 中生成測試結果報告等——進行處理。

截止目前,該項目的呼吁似乎并未引起太多重視,或說是基本未得到重視。如果你覺得這是個好的想法,你可以通過一些方式來支持,比如向你經常使用的測試框架維護者發出聲音。

回顧總結

本篇我們介紹了 JUnit 5 的架構設計,它將原有的 API 分成了兩部分:編寫測試部分的 API 和 執行測試的引擎。這個引擎進一步地被切分成三個部分:一個解析測試代碼的 API、一個測試執行器(launcher),和一些支持不同測試框架的引擎實現。這樣開發者只需要為項目引入 API 部分的依賴(用于編寫測試),而測試框架的開發者們則只需要實現引擎部分的 API(其他工作已經由 JUnit 處理了),構建工具方面也只需要實現 launcher API以協調測試執行。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2016-09-23 10:34:32

JUnitGradleAgile

2016-09-23 10:20:22

JUnit擴展模型Extension

2019-09-24 13:41:22

Hadoop面試分布式

2022-02-20 07:28:13

Spring注解用法

2022-02-19 07:41:36

Bean注解項目

2023-09-21 07:06:17

PSDriveProvider

2024-01-03 07:57:11

高級參數PowerShellVerbose 參數

2009-09-14 09:11:13

CCIE考試體系介紹CCIE

2009-09-15 09:46:04

思科認證體系CCNACCNP

2012-07-30 13:15:58

EVB

2012-07-23 16:18:52

Linux集群HPC架構

2017-04-24 12:07:44

Spark大數據并行計算

2023-04-27 10:50:23

2010-04-23 09:13:05

Oracle體系結構

2016-09-04 14:00:31

Spark

2023-06-02 08:16:14

MySQL體系架構

2019-07-01 12:55:05

安全體系架構網絡安全企業安全

2009-03-26 19:38:05

四核英特爾服務器

2017-08-03 14:01:07

大數據深度學習體系結構

2009-02-05 11:07:27

Sybase SQL SybaseSQL Server
點贊
收藏

51CTO技術棧公眾號

国产成人亚洲综合a∨猫咪| 国产69精品久久久久9| 欧美日韩大片一区二区三区| 看电视剧不卡顿的网站| 国产av无码专区亚洲精品| 亚洲一区二区三区四区在线免费观看| 日本福利专区在线观看| 亚洲欧洲免费视频| 日韩精品免费一区二区三区| 日本在线精品视频| 国产精品嫩草99av在线| 神马影院一区二区三区| 国产iv一区二区三区| 欧美精品第三页| 91在线视频网址| 国产一级片在线播放| 午夜电影网亚洲视频| 麻豆传媒视频在线观看| 国产精品久久综合| 2019一级黄色毛片免费看网| 一区二区三区自拍| 日韩一区二区三区xxxx| 国际av在线| 成人免费在线观看入口| 第一会所sis001亚洲| 亚洲色图第一页| 美臀av在线| 精品国产福利在线| 理论在线观看| 日韩三级.com| 亚州精品国产| 免费观看成人在线视频| 韩国三级成人在线| 国产精品成人va在线观看| 一区二区电影在线观看| 免费国产一区二区| 日韩精品乱码免费| 欧美日韩一区二区三区免费| 久久久久久久高潮| 欧美久久在线| 激情欧美一区二区| www.com毛片| 久久久精品国产免大香伊| 日本特级黄色大片| 粉嫩aⅴ一区二区三区四区| 2024最新电影在线免费观看| 久久手机精品视频| 亚洲国产第一| 国产va亚洲va在线va| 精品一区二区三区在线播放| 91精品91久久久中77777老牛| 狠狠v欧美v日韩v亚洲ⅴ| 美女日批免费视频| 国产精品麻豆网站| 日韩a在线播放| 久久综合激情| 亚洲国产一区二区精品视频| 久久99精品久久久久久动态图| 亚洲国产精品www| 亚洲精品久久嫩草网站秘色| 国产99久久精品一区二区300| 日本wwwwwwwzzzzz视频| 亚洲三级免费看| 欧美调教网站| 99精品国产高清一区二区| 日韩av在线发布| 午夜久久久精品| 欧美亚一区二区| 黄色国产网站| 色婷婷综合在线| 91精品专区| 中文字幕日韩欧美在线| 精品九九在线| 欧美韩国日本在线| 亚洲激情图片qvod| 国产综合在线观看| 色综合久久悠悠| 盗摄系列偷拍视频精品tp| 日本国产高清不卡| 久久久国产精品| 亚洲巨乳在线观看| 亚洲视频在线一区二区| 一本大道色婷婷在线| 久久久久久中文| 日本五级黄色片| 欧美人狂配大交3d怪物一区| av片在线观看网站| 亚洲已满18点击进入在线看片| 国产日韩精品一区| 人在线成免费视频| 国产这里只有精品| 激情国产一区二区| 一二三中文字幕在线| 久久久久五月天| 久久香蕉国产线看观看99| 黄色av网站在线| 欧美日韩一区二区电影| 任我爽精品视频在线播放| 亚洲欧美丝袜| 精品av久久707| 秋霞电影一区二区| 免费网站成人| 欧美精品成人一区二区在线观看| 欧美二区乱c少妇| 青草国产精品| 一级片在线播放| 久久99精品视频一区97| 成人一区二区三区视频在线观看| 麻豆视频免费在线观看| 国产激情综合五月久久| 久久午夜色播影院免费高清| 屁屁影院在线观看| 成人免费xxxxx在线观看| 国产精品视频一二三区| 欧美国产日韩激情| 亚洲婷婷在线视频| 国产精品白丝久久av网站| 成人伊人222| 亚洲精品免费av| 亚洲一区欧美一区| 国产精品福利在线观看播放| 成人免费无码av| 91视频8mav| 欧美视频一区二区| 激情av综合网| 视频一区日韩| 亚洲一区二区三区在线观看视频| 国产视频综合在线| 99精品国产福利在线观看免费| 在线观看免费观看在线91| 国产成人精品午夜| 精品国产乱码久久久久久浪潮| 99re亚洲国产精品| 国产精品1luya在线播放| 亚洲爆乳无码专区| 精品国产成人av| 99精品视频精品精品视频| 国产资源在线观看| 黄色一级片网址| 超碰97人人做人人爱少妇| 亚洲一二三区不卡| 欧美一区二区三区另类| 日本天码aⅴ片在线电影网站| 精品久久免费观看| 久久久久久成人精品| 欧美色播在线播放| 免费久久精品视频| 午夜免费高清视频| 色综合五月天导航| 色妹子一区二区| 国产+成+人+亚洲欧洲自线| 国产情侣一区在线| 蜜桃免费在线| 91嫩草国产丨精品入口麻豆| 91av在线播放视频| 6080国产精品一区二区| 2020国产精品自拍| 韩国一区二区三区在线观看| 污污视频在线看| 丰满爆乳一区二区三区| 91天堂在线视频| 久久久97精品| 欧美亚洲自拍偷拍| 中文字幕成人网| 国产精久久久| 在线麻豆国产传媒1国产免费| 久久久精品动漫| 亚洲福利在线观看| 亚洲高清视频在线| 国产精品成人一区二区三区夜夜夜 | 奇米在线7777在线精品 | 成人一区二区av| 成人国内精品久久久久一区| 992tv成人免费影院| 精品国产一区二区三区久久久| 中文字幕日韩av电影| 日韩中文字幕免费视频| 国产亚洲视频在线| 在线观看欧美日韩| 三级精品视频久久久久| 久久久999精品免费| 欧美激情第99页| 国产精品伦理久久久久久| 日韩在线观看| 视频一区在线免费看| 伊人春色在线观看| 中国av在线播放| 黄色网址在线免费观看| 国产黄色在线观看| 丁香花电影在线观看完整版| 国产高清中文字幕在线| 亚洲mmav| 亚洲狼人综合| 国产精久久一区二区| 精品一区二区三区在线观看视频| 国产中文欧美日韩在线| 久久久久久久久久久久电影| 国产厕拍一区| 午夜久久免费观看| 中文精品视频|