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

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
}
  • 写回答

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).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?