<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
測試分為4個層次
常犯的錯誤:
單測的特徵:
程式碼 bug 總是在所難免, 越早發現問題解決成本越低, 單測可以儘早的暴露錯誤。提高程式碼之路,使得專案更高質量的交付。 起碼有三個優點:
編寫單測是自測的一部分,編寫新程式碼時增加相應的單測,可以幫助我們發現大部分的bug,有助於減少聯調時的調整,提高聯調效率。
功能測試成本相對較高,因為經常需要執行一系列操作以驗證結果是否符合預期。如果問題如果發現了問題,溝通和複測往往要花費很多的時間。
迴歸測試是為了避免在對應用程式進行更改時引入bug。測試人員不僅要測試他們的新特性,還要測試以前存在的特性,以驗證之前實現的特性是否仍然像預期的那樣執行。 通過單元測試,可以在每次構建之後,重新執行整個測試流程,以確保新程式碼不會破壞已有功能
一些異常的場景QA不好構造,比如並行出款是否資金安全,事務異常相關測試等等。而問題經常出現在這些異常的場景,可能引發線上問題甚至是事故。 而單元測試可通過mock的方式方便的模擬各種異常場景。
引入 gomonkey 有如下好處:
功能列表
函數打樁, 對變數的 mock 實現原理跟 gostub 一樣都是通過 reflect 包實現的。除了 mock 變數,gomonkey 還可以直接 mock 匯出函數/方法、mock 程式碼所在包的非匯出函數
Go monkey Permission Denied 解決方案:https://github.com/eisenxp/macos-golink-wrapper
mv $GOROOT/pkg/tool/darwin_amd64/link $GOROOT/pkg/tool/darwin_amd64/original_link cp https://github.com/eisenxp/macos-golink-wrapper/link $GOROOT/pkg/tool/darwin_amd64/link
下載檔案,然後再 cp
wget https://raw.githubusercontent.com/eisenxp/macos-golink-wrapper/main/link
gomonkey 提供瞭如下 mock 方法:
package unittest import ( "testing" "github.com/agiledragon/gomonkey" "github.com/smartystreets/goconvey/convey" ) var num = 10 //全域性變數 func TestApplyGlobalVar(t *testing.T) { convey.Convey("TestApplyGlobalVar", t, func() { convey.Convey("change", func() { patches := gomonkey.ApplyGlobalVar(&num, 150) defer patches.Reset() convey.So(num, convey.ShouldEqual, 150) }) convey.Convey("recover", func() { convey.So(num, convey.ShouldEqual, 10) }) }) }
執行結果:
=== RUN TestApplyGlobalVar
..
2 total assertions--- PASS: TestApplyGlobalVar (0.00s)
PASS
func networkCompute(a, b int) (int, error) { // do something in remote computer c := a + b return c, nil } func Compute(a, b int) (int, error) { sum, err := networkCompute(a, b) return sum, err } func TestFunc(t *testing.T) { // mock 了 networkCompute(),返回了計算結果2 patches := gomonkey.ApplyFunc(networkCompute, func(a, b int) (int, error) { return 2, nil }) defer patches.Reset() sum, err := Compute(1, 2) println("expected %v, got %v", 2, sum) if sum != 2 || err != nil { t.Errorf("expected %v, got %v", 2, sum) } }
結果:
=== RUN TestFunc
expected %v, got %v 2 3
mock_func_test.go:91: expected 2, got 3
--- FAIL: TestFunc (0.00s)FAIL
可以看到上面的結果,執行時失敗的,mock
沒有成功。
有時會遇到mock失效的情況,這個問題一般是內聯導致的。
為了減少函數呼叫時的堆疊等開銷,對於簡短的函數,會在編譯時,直接內嵌呼叫的程式碼。
我們禁用下內聯,然後執行, go test -v -gcflags=-l mock_func_test.go
執行結果:
=== RUN TestFunc
expected %v, got %v 2 2
--- PASS: TestFunc (0.00s)
PASS
對於 go 1.10以下版本,可使用-gcflags=-l禁用內聯,對於go 1.10及以上版本,可以使用-gcflags=all=-l。但目前使用下來,都可以。 關於gcflags
的用法,可以使用 go tool compile --help
檢視 gcflags
各引數含義
到此這篇關於Go單元測試工具gomonkey的使用的文章就介紹到這了,更多相關Go gomonkey內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45