Golang - 在方法中测试 HTTP 请求
Golang - Testing HTTP Request in Method
谈到在 Go 中进行测试时,我有点困惑。我读过在某些情况下抽象到接口应该是理想的方式,在其他情况下我看到了 TestTables。我不太确定何时应用其中任何一个。例如,如何测试下面的函数。
type User{
Name string `json:"name"`
IsMarried bool `json:"isMarried"`
Nicknames []string `json:"nicknames"`
}
func (u *User) Create() (*http.Response, error) {
data, err := json.Marshal(u)
if err != nil {
return nil, err
}
urll := EndpointBase+"/users"
req, err := http.NewRequest(http.MethodPost, urll, bytes.NewReader(data))
if err != nil {
return nil, err
}
resp, err := auth.Session.Client.Do(req)
if err != nil {
return nil, err
}
return resp, nil
}
抽象到接口和 table 驱动的测试是不相关的概念,但它们都很常用。
您可以为您的依赖项抽象出接口,以便您可以 mock/stub 根据需要使用它们(在这种情况下,您的依赖项是您使用 HTTP 调用的任何内容,无论 auth 是什么,以及任何全局 EndpointBase是)。
Table 驱动的测试允许您在测试中使用更少的重复代码更有效地编写多个测试用例。
我要说的是,对此函数进行单元测试不会有太大价值,因为它只是 HTTP 调用的一个薄包装。集成测试会更有用,在这种情况下,抽象到接口对 测试 没有帮助(尽管无论如何这可能是一个很好的设计决策)。
谈到在 Go 中进行测试时,我有点困惑。我读过在某些情况下抽象到接口应该是理想的方式,在其他情况下我看到了 TestTables。我不太确定何时应用其中任何一个。例如,如何测试下面的函数。
type User{
Name string `json:"name"`
IsMarried bool `json:"isMarried"`
Nicknames []string `json:"nicknames"`
}
func (u *User) Create() (*http.Response, error) {
data, err := json.Marshal(u)
if err != nil {
return nil, err
}
urll := EndpointBase+"/users"
req, err := http.NewRequest(http.MethodPost, urll, bytes.NewReader(data))
if err != nil {
return nil, err
}
resp, err := auth.Session.Client.Do(req)
if err != nil {
return nil, err
}
return resp, nil
}
抽象到接口和 table 驱动的测试是不相关的概念,但它们都很常用。
您可以为您的依赖项抽象出接口,以便您可以 mock/stub 根据需要使用它们(在这种情况下,您的依赖项是您使用 HTTP 调用的任何内容,无论 auth 是什么,以及任何全局 EndpointBase是)。
Table 驱动的测试允许您在测试中使用更少的重复代码更有效地编写多个测试用例。
我要说的是,对此函数进行单元测试不会有太大价值,因为它只是 HTTP 调用的一个薄包装。集成测试会更有用,在这种情况下,抽象到接口对 测试 没有帮助(尽管无论如何这可能是一个很好的设计决策)。