-1
# 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

你有另一种方法来解决它吗?

4

2 回答 2

0

如何在 go[...] 中模拟 [...] 插件功能?

你不能。

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

于 2021-11-12T10:20:51.970 回答
-2

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

于 2021-11-12T10:22:56.457 回答