【发布时间】:2021-03-12 16:27:41
【问题描述】:
我想模拟 Go 中的测试方法。我无法弄清楚模拟通常遵循的任何步骤/模式。
考虑下面的代码并帮助我理解。
包 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 函数,使其不调用 FetchData.go 文件中的实际 GetURL 函数,而是模拟它。
【问题讨论】:
-
在 Go 中,您通常根本不模拟。您提供假货或存根。使用 net/http/httptest 设置一个伪造的 HTTP 服务器进行测试很简单。
-
你不模拟方法或函数,你模拟类型。
-
您需要将依赖项作为参数传递给您的结构/函数,而不是在它们的主体中创建它们。
标签: unit-testing go methods interface mocking