golang單元測試之mock

2021-08-17 22:22:57 字數 1749 閱讀 5315

搞單元測試,如果碰到這些情況:

1,乙個函式,內部包含了很多並且很深的呼叫,但是如果單單測這個函式,其實實現的功能很簡單。

2,乙個函式,包含了其他還未實現的呼叫。

3,函式內部對資料的要求極為苛刻。

那麼這時候就可以考慮使用mock來處理。

mock,簡而言之就是可以通過注入我們所期望返回的資料,或者我們所期望傳遞的引數,來避免上面那些情況,其原理則是通過反射來實現。

這次就來看看golang的mock,gomock

gomock是go官方提供的mock解決方案,主要分為兩部分:gomock庫和mock**生成工具mockgen。

使用舉例:

package metal

type imetal inte***ce

type metal struct

func (self metal) getname() string

return

self

.name

}func (self

*metal) setname(brand string) string

我現在有乙個package,其包含了imetal介面,這個介面下面有兩個方法,現在針對這兩個方法來進行mock,ps:gomock只支援inte***ce方法的mock。

在mock之前,需要先通過mockgen來生成mock**,我的源就是上面的imeta介面。

簡單介紹一下mockgen:

它有兩種工作模式---source和reflect

source模式

mockgen -source=foo.go [other options]

根據原始檔來生成,原始檔是包含了乙個或多個inte***ce的檔案。

reflect模式

mockgen src/package conn,driver

乙個檔案定義了多個inte***ce而你只想對部分inte***ce進行mock,或者inte***ce存在巢狀,使用reflect模式

mock**生成好之後,接下來是寫測試函式。

}然後執行go test即可,會發現這些被mock的函式會按照我們定義的行為來執行。

附帶兩個gomock的官方資料,基本上看完了就可以上手了。

第乙個是gomock庫的所有方法說明,第二個是官方的例子,裡面有如何進行gomock的方法使用。

單元測試之模擬Mock

先看下面一段 public class dataservice idataservice public int getcount 其中有 getcount 方法是為獲取列表的 count,我們為這個方法寫單元測試 getcount 中獲取列表是呼叫了 idatarespository 中的 getl...

golang 之單元測試

測試是自動化測試的簡稱,即編寫簡單的程式來確保程式 產品 在測試中針對特定輸入產生預期的輸出。go的測試方法看上去相對比較低階,它依賴於命令go test和一些能用go test執行的測試函式的編寫約定 go test 子命令是go語言包的測試驅動程式,這些包根據某些約定組織在一起。在乙個包目錄中,...

golang 單元測試

單元測試是質量保證十分重要的一環,好的單元測試不僅能及時地發現問題,更能夠方便地除錯,提高生產效率,所以很多人認為寫單元測試是需要額外的時間,會降低生產效率,是對單元測試最大的偏見和誤解 go 語言原生支援了單元測試,使用上非常簡單,測試 只需要放到以 test.go結尾的檔案中即可。golang的...