如何模拟单元测试的外部方法

How to mock external methods for unit testing

我想在 Go 中模拟测试方法。我无法弄清楚通常被用来模拟的任何 steps/pattern。

考虑下面的代码并帮助我理解。

包fetchClient

client.go

type Client struct {
    URL     string
}

type ClientData struct {
    ID      string       
}

func (p *Client) GetURL(ID string) (*ClientData) {
    data := &ClientData{}
    //Some work to store client information into data struct and return it 
    return data
}

打包fetchClientData

FetchData.go

// Function GetData that accepts a client ID as argument and returns client URL
func GetData(ID string) (*fetchClient.Client.URL) {
    param := (*Client).GetURL(ID) 
    return param
}

FetchData_test.go //想知道如何按照下面的问题进行模拟。

问题:如何在 FetchData_test.go 文件中模拟伪造的 GetURL 函数,使其不调用实际的 GetURL 函数在 FetchData.go 文件中,而不是模拟它。

可能有两种方法可以解决您的问题。我只能根据您发布的代码做出一些假设,这些代码非常少。但是你要么必须创建通过 http 测试实现你的功能的模拟库,要么你可以将你的函数调用迁移到一个接口中 used/consumed 以便你可以在 GoMock 中使用 MockGen 功能。后者可能会更清晰,更接近 Go 最佳实践。

查看他们的文档。 https://github.com/golang/mock