如何在golang中模拟go插件函数


# 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[…]中模拟[…]插件函数?

您不能。

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

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

最新更新