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

關于單測技術選型,聊聊我的思考

開發 前端
其中 JUnit 不支持 Mock,因此基本不會只用 JUnit,而是結合其他有 Mock 功能的框架一起使用。從知名度及使用率來說,Mockito 和 Spock 使用較多,而 PowerMock、JMockit、TestableMock 使用較少。下面我們將主要對比 Mockito 和 Spock 兩種框架的差異。

對于單測來說,目前常用的單測框架有:

  • JUnit
  • Mockito
  • Spock
  • PowerMock
  • JMockit
  • TestableMock

其中 JUnit 不支持 Mock,因此基本不會只用 JUnit,而是結合其他有 Mock 功能的框架一起使用。從知名度及使用率來說,Mockito 和 Spock 使用較多,而 PowerMock、JMockit、TestableMock 使用較少。下面我們將主要對比 Mockito 和 Spock 兩種框架的差異。

Mockito

Mockito 是 Java 單元測試中的 Mock 框架,一般都是與 JUnit 一起使用。Mockito 功能強大,幾乎所有你能想到的功能都支持,并且由于發布時間較長,因此使用的人非常多。

  • 優點:功能強大、使用人數多、資料豐富。
  • 缺點:代碼不夠簡潔、沒有統一的單測結構、不支持靜態方法和私有方法 Mock。

更多信息詳見官網:https://site.mockito.org/

Spock

Spock 是一個企業級的測試規范框架,可用來測試 Java 和 Groovy 應用。Spock 最大的特色是其簡潔美觀的語言規范。Spock 兼容絕大多數 IDE、編譯工具和 CI 集成服務器。Spock 框架使用 Groovy 語言編寫,而 Groovy 語言則是 Java 語言的超集,絕大多數 Java 語言語法在 Groovy 中都支持。

  • 優點:單測結構統一、代碼簡潔、異常測試及參數測試支持更好。
  • 缺點:學習成本略高、不支持靜態方法和私有方法 Mock。

更多信息詳見官網:https://spockframework.org/

Mockito vs Spock

在 Spock vs JUnit 5 - the ultimate feature comparison 中詳細對比了 Mokito 與 Spock 的差異,他們在發展情況、學習曲線、工具支持等方面的比較如下圖所示。

圖片

從上圖可以看到,Mockito 框架在發展、學習曲線、工具支持、從 JUnit4 遷移幾方面比較有優勢。而 Spock 框架則在測試結構、異常測試、條件測試等方面比較有優勢。因此,選擇哪個測試框架完全基于實際情況。例如,如果你目前的情況是:

  1. Java 是唯一的語言。
  2. 想要更強的編譯時錯誤檢查。
  3. 更穩定、更主流的實現方式。

那么選擇 JUnit + Mockito 的方式是更好的選擇。但如果你目前的情況是:

  1. 希望單測跟簡單易讀
  2. 更簡潔的參數測試與異常測試

那么選擇 Spock 會是更好的選擇。

為啥選擇 Spock?

根據前面的分析,Mockito 的主要優勢在于比較穩定、主流,缺點在于不夠簡潔易讀。而 Spock 雖然使用人群沒有 Mockito 那么多,但國內也有一些大廠在使用 Spock,例如美團等(可參考:Spock 單元測試框架介紹以及在美團優選的實踐)。

我們重視寫單測,但是又不希望寫單測花費太多時間,畢竟業務才是第一位的。因此,我們希望單測代碼盡可能簡潔、可維護。 基于這個原因,我們選擇了 Spock 框架作為朝昔后端的單測框架解決方案。而 Spock 不支持 static 方法及 private 方法 Mock 的缺陷,則嘗試通過整合 PowerMock 或 TestableMock 來解決。

可維護性更強

在極客時間《程序員的測試課》中,有一節關于講了一個好的自動化測試長什么樣?在這里面,作者提到一個好的單測應該由 準備、執行、斷言、清理 4 個階段組成。

對于 Mockito 而言,它并沒有規定具體的代碼規范,因此只能依靠注釋來標注哪些代碼是準備階段的代碼,哪些是執行階段的代碼,哪些是斷言階段的代碼,如下代碼所示。

class SimpleCalculatorTest {
@Test
void shouldAddTwoNumbers() {
//given 準備
Calculator calculator = new Calculator();
//when 執行
int result = calculator.add(1, 2);
//then 斷言
assertEquals(3, result);
}
}

對于 Spock 而言,其通過 given-when-then 的結構,強制要求編寫者將不同階段的代碼放到不同的位置,從而增強了可讀性。同樣是用于測試計算器的加法函數的單測用例,使用 Spock 框架編寫的單測如下代碼所示。

class SimpleCalculatorSpec extends Specification {
def "should add two numbers"() {
given: "create a calculater instance"
Calculator calculator = new Calculator()
when: "get calculating result via the calculater"
int result = calculator.add(1, 2)
then: "assert the result is right"
result == 3
}
}

可以看到,通過 given-when-then 結構的劃分,我們可以更加快速地弄清楚單測的內容,從而提高單測的可讀性,使得單測更加容易維護。

代碼更加簡潔

對于 Mockito 與 Spock 而言,它們之間的一個很大的差別是:Spock 的代碼更加簡潔。這個特性可以讓我們編寫比 Mockito 更少的代碼,從而實現同樣的功能。例如在 Mockito 中,我們 Mock 某個接口實現時,通常需要寫一長串的 give(...).return(...)? 代碼。而在進行斷言的時候,也需要寫比較長的 then(xx).should(xx).checkxx() 代碼,如下圖所示。

@Test
public void should_not_call_remote_service_if_found_in_cache() {
//given
given(cacheMock.getCachedOperator(CACHED_MOBILE_NUMBER)).willReturn(Optional.of(PLUS));
//when
service.checkOperator(CACHED_MOBILE_NUMBER);
//then
then(webserviceMock).should(never()).checkOperator(CACHED_MOBILE_NUMBER);
verify(webserviceMock, never()).checkOperator(CACHED_MOBILE_NUMBER);
}

但在 Spock 中的代碼就相對比較簡潔,如下所示代碼實現了上述 Mockito 代碼同樣的功能。

def "should not hit remote service if found in cache"() {
given:
cacheMock.getCachedOperator(CACHED_MOBILE_NUMBER) >> Optional.of(PLUS)
when:
service.checkOperator(CACHED_MOBILE_NUMBER)
then:
0 * webserviceMock.checkOperator(CACHED_MOBILE_NUMBER)
}

可以看到,Spock 沒有 given、willReturn 等關鍵詞,而是取而用 >> 等符號來實現,這樣代碼更加簡潔,閱讀起來也更加明了。

案例代碼對比:https://www.yuque.com/lugew/spock/wkxhvk

責任編輯:武曉燕 來源: 樹哥聊編程
相關推薦

2022-09-22 09:54:56

技術選型

2022-06-08 13:25:51

數據

2016-10-21 15:58:51

容器容器技術Docker

2022-05-27 11:46:48

技術能力思考

2020-09-25 07:40:39

技術開發選型

2019-05-30 14:30:42

技術管理架構

2021-03-10 09:33:51

技術研發管理

2015-05-20 09:44:54

混合云云存儲合規

2023-03-31 13:53:00

低代碼平臺選型

2022-03-18 08:57:17

前端數據流選型

2023-07-04 08:09:05

數據庫選型集中式

2022-04-10 11:52:43

前端單測程序

2022-05-26 09:03:39

AOP編程

2021-02-22 09:30:09

go開發環境桌面系統

2025-03-14 08:00:59

TypeScript編譯器Go

2023-04-13 07:41:14

RoCE技術RDMA

2022-08-01 07:38:29

代碼開發

2021-12-08 10:54:09

汽車智能芯片

2011-04-13 14:04:14

Java數組

2015-01-27 09:47:49

網站技術存儲網站演進
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久一区二区| 中文日韩在线观看| 中文字幕av在线| 欧美性xxxxxx| 蜜桃视频在线免费| 精品国产乱码久久久久久老虎| 欧美大陆国产| av免费观看久久| 国产成人综合在线观看| 8x8x最新地址| 在线不卡a资源高清| 91精品福利观看| 国产精品丝袜视频| 国产99久久久国产精品| 免费福利在线观看| 中文字幕亚洲无线码在线一区| 亚洲91视频| 久久9精品区-无套内射无码| 欧美无砖砖区免费| 亚洲另类春色校园小说| 亚洲视频在线二区| 欧美日韩国产精品专区| 91九色成人| 一本一本久久a久久精品综合妖精| 午夜欧美视频在线观看| 视频精品国内| 岛国大片在线播放| 69p69国产精品| 午夜精彩国产免费不卡不顿大片| 黄色免费观看视频网站 | 欧美xxxbbb| 亚洲综合成人婷婷小说| 欧美国产在线观看| 欧美大片网站| 免费看污污视频| 亚洲理论在线a中文字幕| 美女一区二区三区| 97人人在线视频| 国产精品视频不卡| 久久久加勒比| 97视频在线免费| 欧美国产一区二区三区| 亚洲另类黄色| 阳光姐妹淘韩国版| 日韩成人在线观看| 成人黄色大片在线观看| 周于希免费高清在线观看| 91九色国产社区在线观看| 国产网站一区二区| 欧美黑人粗大| 最新视频 - x88av| 最近2019免费中文字幕视频三| www.在线成人| 日韩久久一区二区三区| 水蜜桃一区二区| 亚洲开心激情网| www.亚洲精品| 欧美一区在线观看视频| 国产在线视频在线| 欧美激情国内偷拍| 午夜精品久久一牛影视| 久久av中文字幕片| 亚洲1234区| 真人抽搐一进一出视频| 中文字幕日韩av综合精品| 91麻豆福利精品推荐| 青草国产精品| 精品一性一色一乱农村| 色一情一乱一伦一区二区三区| 亚洲精品美女久久| 国产亚洲一二三区| 国产亚洲激情| 欧美国产日韩电影| 四虎黄色影院| 久久亚洲午夜电影| 久久久久久久电影一区| 精品无吗乱吗av国产爱色| 久久99欧美| 欧美乱大交xxxxx| 欧美性猛交xxxxx免费看| 国产尤物一区二区在线| 久久av综合| 久久久久久久性潮| 小明精品国产一区二区三区| 日韩免费电影一区二区| 久久视频国产精品免费视频在线 | 人妻内射一区二区在线视频| 国产精品扒开腿做爽爽爽视频 | free性欧美hd另类精品| 很黄很a的视频| 在线看的黄色网址| 亚洲蜜桃在线| 国产精品高潮呻吟视频| 51精品秘密在线观看| 国产精品国产三级国产aⅴ中文 | 自慰无码一区二区三区| 精品欧美国产| 91精品中国老女人| 国内精品久久影院| 色婷婷av一区二区三区在线观看| 日韩一区二区影院| 日韩欧美一区视频| 懂色av中文一区二区三区天美| 久久久久国产精品人| 国产一区二区三区久久久久久久久| 国产精品色呦| 欧美挤奶吃奶水xxxxx| 欧美aaa视频| 老司机99精品99| 超碰在线观看免费版| av在线中出| 欧美电影免费观看高清完整| www在线视频| 中国av在线播放| 在线观看亚洲视频| 欧美一区二区三区播放老司机| 欧美日韩大陆在线| 精品国产免费一区二区三区香蕉| 欧美精选一区二区| 91精品国产综合久久精品性色| 日韩欧美一级二级| 亚洲美女在线观看| 欧美国产日韩一区二区三区| 久久久久久久激情视频| 午夜精品www| 91精品久久久久久久久久久| 成人www视频在线观看| 好吊妞www.84com只有这里才有精品 | 久久精品国产成人| 另类视频在线观看| 午夜伦理精品一区| 国产一区免费在线观看| 亚欧洲精品在线视频免费观看| 青青草综合视频| 狠狠躁狠狠躁视频专区| 日本蜜桃在线观看| 精品按摩偷拍| 自拍视频亚洲| 成人性生交大合| 香蕉乱码成人久久天堂爱免费| 在线国产电影不卡| 中文字幕少妇一区二区三区| 成人午夜在线影院| 一个色的综合| 麻豆av在线| 国产精品一品| 成人羞羞视频播放网站| 国产白丝精品91爽爽久久| 亚洲成人自拍网| 在线视频欧美日韩精品| 国产精品久久久久久久天堂第1集| 国产综合av在线| 日韩电影大全网站| 国内精品在线播放| 欧美中文字幕一区二区三区| 97免费中文视频在线观看| 国产一区 在线播放| 精品麻豆一区二区三区| 欧美激情777| 欧美韩国日本综合| 亚洲天堂av在线播放| 国内精品久久国产| www浪潮av99com| 2019中文亚洲字幕| 国产成人精品aa毛片| 亚洲第一视频网站| 成人综合国产精品| jizzjizzjizz亚洲| 国产成人精品一区二三区在线观看| 日韩精品一区二区三区免费观影 | **亚洲第一综合导航网站| 热99这里只有精品| 黄在线观看免费网站ktv| 欧美精选在线| 911精品国产一区二区在线| 国产欧美日韩中文字幕在线| 日日噜噜噜噜久久久精品毛片| 91超碰国产在线| 玖玖精品视频| 欧美老年两性高潮| 99国产超薄丝袜足j在线观看 | 91精品国产调教在线观看| 欧美国产97人人爽人人喊| 久久久av亚洲男天堂| 一区国产精品| 99视频这里有精品| 婷婷一区二区三区| 狠狠爱一区二区三区| 一本大道色婷婷在线| 欧美国产一区二区在线观看 | 美女毛片在线看| 亚洲成人最新网站| 精品免费视频123区| 成人午夜精品在线| 亚洲成人久久电影| 亚洲欧美99| 99热播精品免费| 懂色av一区二区在线播放| 美日韩在线视频| 在线免费国产|