【问题标题】:How to mock go-plugin funcs in golang?如何在 golang 中模拟 go-plugin 函数?
【发布时间】:2021-12-24 16:17:41
【问题描述】:
# I want to mock this function
func testCheckPluginFile(fName string){
    plugin, _ := plugin.Open(path.Join("/I/expect/folder/","/plugin-lib-test/"+fName))
    plugin.Lookup("symbol")
}

# So I put this func like this
func testCheckPluginFile(fName string,pluginOpen func (path string) (*plugin.Plugin, error)){
    plugin, _ := pluginOpen(path.Join("/I/expect/folder/","/plugin-lib-test/"+fName))
    plugin.Lookup("symbol")
}

但我不能这样做,因为plugin.Plugin.lookup

你有别的办法解决吗?

【问题讨论】:

    标签: go go-testing gomock


    【解决方案1】:

    如何在 go[...] 中模拟 [...]plugin 函数?

    你不能。

    如果你想测试你必须使用一个真正的插件。

    【讨论】:

      【解决方案2】:

      Golang 中的 Mocking 有点棘手,通常需要生成一些代码。您需要为plugin 包和plugin.Plugin 编写接口(如果包本身不提供这些接口;唉,这种情况经常发生)。然后,使用模拟生成器(通常的嫌疑人是gomock)创建具有所有常见模拟功能(预期、条件返回等)的模拟。在生产代码中,提供您自己编写的生产实现;它们仅包含调用真实事物的简单传递方法(在本例中为Open()Lookup())。 (请记住,您想测试testCheckPluginFile 是否正常工作,而不是plugin 包是否正常工作。)这样做,您应该能够遵循正确的 TDD 工作流程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        • 2015-05-28
        • 2013-11-27
        • 2019-04-05
        • 1970-01-01
        相关资源
        最近更新 更多