gomonkey 是 golang 的一款打樁框架,目標是讓用戶在單元測試中低成本的完成打樁,從而將精力聚焦于業務功能的開發。
實現原理《golang實現運行時替換函數體及其原理》
注意:Reset方法用于刪除樁, 注意使用defer將刪除樁壓棧。
方法 | 作用 | 函數使用說明 |
---|---|---|
ApplyFunc(target, double interface{} | 為函數/ 接口打一個樁 | target表示函數名,第二個參數表示樁函數。 |
ApplyFuncSeq(target interface{}, outputs []OutputCell) | 為函數/ 接口打一個特定的樁序列 | target表示函數名,第二個參數表示樁序列參數(返回值需序列)。 |
ApplyMethod(target reflect.Type, methodName string, double interface{}) | 為成員方法打一個樁 | target表示對象類型,對象的方法名,第三個參數表示樁函數。 |
ApplyMethodSeq(target reflect.Type, methodName string, outputs []OutputCell) | 為成員方法打一個特定的樁序列 | target表示對象類型,對象的方法名,第三個參數表示樁序列參數(返回值需序列)。 |
ApplyFuncVar(target, double interface{}) | 為函數變量打一個樁 | target表示函數變量,第二個參數表示樁函數。 |
ApplyFuncVarSeq(target interface{}, outputs []OutputCell) | 為函數變量打一個特定的樁序列 | target表示函數變量,第二個參數表示樁序列參數(返回值需序列)。 |
ApplyGlobalVar(target, double interface{}) | 為全局變量打一個樁 | target表示函數變量,第二個參數表示樁函數。 |
Reset() | 刪除樁 |
func Test_UserDao2(t *testing.T) {Convey("Give test start", t, func() {Convey("When ApplyFunc For Func", func() {// 支持為函數打一個樁want := "replace SelectOne Return"selectOnePatch := gomonkey.ApplyFunc(SelectOne, func(id string) string {return want})defer selectOnePatch.Reset()ret := SelectOne("1")So(ret, ShouldEqual, want)})// 支持為函數打一個特定的樁序列Convey("When ApplyFuncSeq For Func", func() {want := []gomonkey.OutputCell{{Values: gomonkey.Params{"1"}},{Values: gomonkey.Params{"2"}},{Values: gomonkey.Params{"3"}},}selectList := gomonkey.ApplyFuncSeq(SelectList, want)defer selectList.Reset()Convey("Then Test ApplyFuncSeq Patch", func() {So(SelectList(), ShouldEqual, "1")So(SelectList(), ShouldEqual, "2")So(SelectList(), ShouldEqual, "3")})})// 支持為成員方法打一個樁Convey("When ApplyMethod For userDao Func", func() {u := &userDao{}updateF := gomonkey.ApplyMethod(reflect.TypeOf(u), "update", func(_ *userDao, id, name, phoneNumber string) int64 {fmt.Println(id, name, phoneNumber)return 1})defer updateF.Reset()Convey("Then Test ApplyMethod userDao Func Patch", func() {So(u.update("", "", ""), ShouldEqual, int64(1))})})// 支持為全局變量打一個樁num := 1Convey("When ApplyGlobalVar", func() {globalVar := gomonkey.ApplyGlobalVar(&num, 10)defer globalVar.Reset()Convey("Then Test ApplyGlobalVar Patch", func() {So(num, ShouldEqual, int64(10))})})// 定義函數變量f1, f2f1 := func() string {return "0"}f2 := func() string {return "0"}// 支持為函數變量打樁Convey("When ApplyFuncVarSeq", func() {want := []gomonkey.OutputCell{{Values: gomonkey.Params{"1"}},{Values: gomonkey.Params{"2"}},{Values: gomonkey.Params{"3"}},}// 支持為函數變量打一個特定的樁序列funcVarSeq := gomonkey.ApplyFuncVarSeq(&f1, want)defer funcVarSeq.Reset()// 支持為函數變量打一個樁objVar := gomonkey.ApplyFuncVar(&f2, func() string {return "ggr"})defer objVar.Reset()Convey("Then Test ApplyFuncVarSeq&ApplyFuncVar Patch", func() {So(f1(), ShouldEqual, "1")So(f1(), ShouldEqual, "2")So(f1(), ShouldEqual, "3")So(f2(), ShouldEqual, "ggr")})})})}
gomonkey是一款非常常用的打樁工具,務必學會使用。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
魔獸世界,美服,歐服,選擇?歐服和美服基本沒有本質區別,都是暴雪最重視的領域,環境基本相同。然而,大多數美國服裝講英語。選擇換公會的時候,不需要考慮語言問題,但是歐服里有一些公會只使用小語種。接下來,你要考慮你的時差。這個要看你的位置了。估計你不想只在他們人最少的時候上線。以下問題要求您選擇特定的服務器。首先,你要考慮你是想去PVP還是PVE服務器。PVE服務器一直都是超過PVP的,無論是數量還是...
風暴戰區怎么全屏?見意你不要調全屏了一個窗口你按就開始建還也可以切回來觀看電影不能全屏是怎么回事???f12,你選擇三角符號特殊符號,全屏后選著頻幕,可以修改分辨率設置為自己電腦的顯示器分辨率,不過沒法再次全屏游戲。1280*720的電影該怎么播放?我現在電影可分16:9或1:2.35,1280*720的是16比9的,在現在寬屏顯示器電視看上也可以全屏,1280*536是1比2.35的,上一有黑邊的...
太原西客站時刻表 太原西站什么時候關門?太原西客站在哪里? 根據太原市交通局《關于有序恢復長途客運運營的通知》精神,太原汽車西站已具備恢復運營準備的基本條件。從2020年3月5日起,班車客運運營將嚴格按照相關要求有序恢復?,F將有關事項通知如下:車站日運行時間暫定為7:30-18:00。西站與各線路與發車站溝通后,自3月6日起首次開通:太原-大寧 10:00太原-永和 13:20 其他未開通線路...