dtdvlazd56637 2017-03-22 12:52
浏览 54
已采纳

是否可以模拟从golang包中导入的函数?

I have the following method to test, which uses a function imported from a package.

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}

Is it possible to mock SomeFunc() in golang?

  • 写回答

3条回答 默认 最新

  • doudi5524 2017-03-22 12:57
    关注

    Yes, with a simple refactoring. Create a zSomeFunc variable of function type, initialized with z.SomeFunc, and have your package call that instead of z.SomeFunc():

    var zSomeFunc = z.SomeFunc
    
    func abc() {
        // ...
        v := zSomeFunc()
        // ...
    }
    

    In tests you may assign another function to zSomeFunc, one that is defined in tests, and does whatever the test wants it to.

    For example:

    func TestAbc(t *testing.T) {
        // Save current function and restore at the end:
        old := zSomeFunc
        defer func() { zSomeFunc = old }()
    
        zSomeFunc = func() int {
            // This will be called, do whatever you want to,
            // return whatever you want to
            return 1
        }
    
        // Call the tested function
        abc()
    
        // Check expected behavior
    }
    

    See related / possible duplicate: Testing os.Exit scenarios in Go with coverage information (coveralls.io/Goveralls)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?