dongyingdao8867
2019-03-28 12:43
浏览 125
已采纳

Golang-在方法中测试HTTP请求

I'm a little confused when it comes to testing in Go. I've read that abstracting to interfaces should be the ideal way to go in some cases, in other cases I see TestTables. I'm not too sure when to apply either one. For instance, how would one go about testing the function below.

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
}

图片转代码服务由CSDN问答提供 功能建议

在Go中进行测试时,我有些困惑。 我读过,在某些情况下,抽象到接口应该是理想的方法,在其他情况下,我看到TestTables。 我不太确定什么时候应用。 例如,如何测试下面的功能。

 类型User {
名称字符串`json:“ name”`
 IsMarried布尔`json:“ isMarried  “`
昵称[]字符串json:”昵称“`
} 
 
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,字节。  NewReader(data))
 if err!= nil {
 return nil,err 
} 
 
 resp,err:= auth.Session.Client.Do(req)
如果err!= nil {\  n return nil,err 
} 
 return resp,nil 
} 
   
 
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • droc60607 2019-03-28 12:51
    已采纳

    Abstracting to interfaces and table-driven tests are unrelated concepts that are commonly both used.

    You would abstract to interfaces for your dependencies so that you can mock/stub them as needed (in this case, your dependencies are whatever you're calling with HTTP, whatever auth is, and whatever the global EndpointBase is).

    Table-driven tests allow you to write multiple test cases more efficiently with less repeated code in your test.

    I'd say that unit testing this function won't have much value though, because it's such a thin wrapper around an HTTP call. An integration test would be more useful, in which case abstracting to interfaces wouldn't help with testing (though it could be a good design decision anyway).

    点赞 评论

相关推荐 更多相似问题