当前位置: 首页 > 面试题库 >

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

许焕
2023-03-14
问题内容

我有以下测试方法,该方法使用从包中导入的函数。

import x.y.z

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

可以SomeFunc()在golang中进行模拟吗?


问题答案:

是的,只需进行简单的重构即可。创建一个zSomeFunc函数类型的变量,用初始化z.SomeFunc,并让您的包调用而不是z.SomeFunc()

var zSomeFunc = z.SomeFunc

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

在测试中,您可以为分配另一个功能zSomeFunc,该功能是在测试中定义的,并且可以执行测试所需的功能。

例如:

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
}


 类似资料:
  • 问题内容: 我想了解如何从导入的模块执行功能。 这是我到目前为止的位置。 app / mocking.py: app / my_module / init.py: 测试/模拟测试.py: 这不 符合 我的预期。“已修补”模块仅返回的未模拟值。如何模拟要导入到被测名称空间中的其他包中的方法? 问题答案: 当您从包中使用装饰器时,您 未在 修补名称空间(从本例中导入模块),而是在被测试的名称空间中对其

  • 我有一些代码如下所示: 有没有办法从ScalaTest中模拟/存根,就像使用nodejs的proxyquire一样? 我读到我可以使用依赖注入,但我宁愿不这样做 我唯一的选择是传递我的lib作为类参数吗? 有什么建议可以让它更容易测试吗?谢啦 编辑: 泽维尔·吉奥特的回答是这个问题的一个有趣的方法,但是我选择改变代码来进行测试。 我将作为参数传递,并使用mockito进行模拟,这使代码比隐藏范围更

  • 例如,我在golang中进行了以下测试: 如果我尝试构建它,我会收到以下内容: 有没有办法让编译器内联?如果是,是否有任何方法可以内联映射迭代?

  • 问题内容: 我想知道是否可以在Go中为未知数量的变量定义函数。 像这样 我想对任意数量的输入进行泛化。 问题答案: 据我所知,您已经了解了很多,但是语法是。见规格: 给定功能并调用 在Greeting中,将具有价值

  • 我仍然是AnyLogic和JAVA的基本用户,但我遇到了获取服务块剩余时间的问题。我知道服务块嵌入了延迟块,并且有一个用于延迟的函数(getRemainingTime(代理))。是否可以在(代理)main中调用此函数? 我需要获得我的产品将停留在服务块的时间,以导航我的推送过程。我有3个产品(都是个人代理)和一个在服务前装配我的产品和1个原材料(个人代理)的拾取块。显然,剩余时间必须是动态的,并且

  • 问题内容: 我有一个需要一些模块。有没有办法可以注入模块本身?我意识到这有点麻烦。 例: 我想在这种情况下,解决方案是将方法转换为完整的类。这显然是一个简化的示例;我正在处理的代码有很多这样的方法,因此将它们分成单独的类并引入配置它们的模块会增加相当多的混乱- 我认为Guice就是要减少样板混乱? 也许这反映了我对Guice的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么… 问