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条)

报告相同问题?

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存