首頁>技術>

最近棧長注意到阿里開源了自家的 Mock 工具:TestableMock,該工具號稱最輕量、簡單、舒適的 Mock 測試工具,功能十分強大,媲美 PowerMock,用法比 Mockito 還要簡潔,還不挑框架,指哪換哪,一個 @MockMethod 註解打天下。。。

這麼強大的麼?棧長趕緊來體驗一翻!

TestableMock 簡介

TestableMock 開源地址:

https://github.com/alibaba/testable-mock

TestableMock 在 2020 年 12 月開始開源,出自阿里云云效團隊,主要想解決 Java 開發者在日常單元測試中經常遇到的痛點:

外部依賴Mock繁瑣私有方法難測試無返回值方法難測試複雜引數難構造

它所承載的職責是 “讓Java沒有難測的方法”,換種思路寫Mock,讓單元測試更簡單,這也是 TestableMock 名字的來歷。

無需初始化,不挑測試框架,甭管要換的是私有方法、靜態方法、構造方法還是其他任何類的任何方法,也甭管要換的物件是怎麼建立的。

寫好 Mock 定義,加個 @MockMethod 註解,一切統統搞定。

主流Mock工具對比

在 TestableMock 開源之前,目前市面上主流的 Mock 工具主要有:

MockitoSpockPowerMockJMockitEasyMock….

Mockito 應該是目前使用最多的 Mock 工具了,因為它使用足夠簡單,在 IntelliJ IDEA 和 Eclipse 開發工具上也都有專用的外掛支援,但 Mock 功能相對來說還是較弱,不能覆蓋所有應用場景。因為其使用的是動態代理技術,我們都知道,動態代理只能在方法前後環繞,有一定的侷限性,所以 final 型別、靜態方法、私有方法全都無法覆蓋到。

上面所列的主流的 Mock 工具也只有 PowerMock 在功能上能夠與 TestableMock 持平,但 PowerMock 使用較為複雜,而且由於使用的是自定義類載入器技術,所以也還會存在一定的問題。

下面來看下具體對比:

工具原理最小Mock單元被Mock方法限制難度IDE支援Mockito動態代理類不能Mock私有/靜態和構造方法較容易很好Spock動態代理類不能Mock私有/靜態和構造方法較複雜一般PowerMock自定義類載入器類任何方法皆可較複雜較好JMockit執行時位元組碼修改類不能Mock構造方法較複雜一般TestableMock執行時位元組碼修改方法任何方法皆可很容易一般

TestableMock 和 JMockit 底層一致,使用的是 “執行時位元組碼修改“ 技術,在單元測試啟動時就掃描測試類和被測類的位元組碼,完成 Mock 方法的替換。

上手 TestableMock

在專案中的 pom.xml 檔案中增加 testable 相關依賴及單元測試相關依賴和外掛,完整的配置如下:

增加一個類,呼叫任意方法、成員方法、靜態方法:

使用確實很簡單,非常靈活,功能也確實比動態代理那種要強大,一個 @MockMethod 註解走天下,可以扔掉其他的 Mock 工具了。

參考文件:

17
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 直播APP原始碼在開發過程中需要注意哪些問題?