在Golang用簡單的方式Mock function

其實官方有Mock package

但我稍微看了一下

都是在Mock interface

我遇到的問題是

我用到其他package的function

而那隻package沒有用interface

所以無法產生Mock object

Google上的解法

都偏向Dependency Injection

但Code已經寫好了

只想簡單的Mock別的package的function

怎麼這麼麻煩?

結果找到一篇

有個簡單解法

main.go

import "some/package"

var wantMockFunc = package.someFunc
function myFunc () {
    wantMockFunc()
}

main_test.go

func TestMyFunc (t *Testing.T) {
    oldFunc := wantMockFunc
    defer func () {
        wantMockFunc = oldFunc
    }()

    wantMockFunc = func () {
        print("Mocked")
    }
}

原來可以簡單地先在test裡面替換要mock的function

在測試完之後再換回來

這樣就可以非常簡單地達到Mock function了!!

看更多