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

Unit testing 如何模拟单元测试的外部方法,unit-testing,go,methods,interface,mocking,Unit Testing,Go,Methods,Interface,Mocking,我想模拟Go中的测试方法。我无法理解模仿通常遵循的任何步骤/模式 考虑下面的代码并帮助我理解 包获取客户端 客户机,开始 包fetchClientData FetchData.go FetchData_test.go //想知道如何模仿下面的问题 问题:如何在FetchData_test.go文件中模拟假GetURL函数,使其不调用FetchData.go文件中的实际GetURL函数,而是模拟它。可能有两种方法解决您的问题。我只能根据您发布的代码进行一些假设,这些代码非常少。但是您必须创建通过h

我想模拟Go中的测试方法。我无法理解模仿通常遵循的任何步骤/模式

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

包获取客户端

客户机,开始

包fetchClientData

FetchData.go

FetchData_test.go //想知道如何模仿下面的问题


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

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


查看他们的文档

在围棋中,你通常一点也不嘲笑。你提供假货或存根。使用net/HTTP/httptest设置一个假的HTTP服务器进行测试是很简单的。你不模拟方法或函数,而是模拟类型。你需要将依赖项作为参数传递给你的结构/函数,而不是在这些结构/函数的主体中创建它们。我建议通过
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
}
// 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
}