gpt4 book ai didi

unit-testing - 在 go 中正确测试 http 路由

转载 作者:数据小太阳 更新时间:2023-10-29 03:24:39 25 4
gpt4 key购买 nike

我有 5 个端点,它们具有 GET、POST 和 DELETE 等方法来测试。我使用 go 的内置测试包编写了测试用例。我担心我遗漏了一些我不感兴趣的案例。我已经在代码审查中发布了我的测试用例进行审查,但我没有得到任何回应。我也关注了这个帖子Testing HTTP routes in golang .所有这些测试用例都在检查响应代码。

问题是,我的大部分测试用例都遵循类似的模式,我以不同的格式发布数据并检查响应代码。我强烈觉得我错过了一些东西,当我将它推向产品时会破坏我的 API。我需要对测试这些路由有一些了解,这样我才能有信心将 API 推向产品。

main_test.go

func TestSigHandler(t *testing.T){

test_cases := []string{"2021205"}
// GET Testing
for _, method := range test_cases{
usersUrl = fmt.Sprintf("%s/1/sig/id/%s", server.URL, method) //Grab the address for the API endpoint
request, err := http.NewRequest("GET", usersUrl, nil)
res, err := http.DefaultClient.Do(request)

if err != nil {
t.Error(err) //Something is wrong while sending request
}

if res.StatusCode != 200 {
t.Errorf("Something went wrong : ", res.StatusCode) //Uh-oh this means our test failed
}
}

// POST Testing
sig := []byte( `{
"raw": "a new sig"
}`)
usersUrl = fmt.Sprintf("%s/1/sig/id/2021205", server.URL) //Grab the address for the API endpoint
request, err := http.NewRequest("POST", usersUrl, bytes.NewBuffer(sig))
if err != nil{
t.Error(err)
}
request.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(request)

if err != nil {
t.Error(err) //Something is wrong while sending request
}

if res.StatusCode != 200 {
t.Errorf(" Something Went Wrong: ", res.StatusCode) //Uh-oh this means our test failed
}

// DELETE Testing

sigs_delete_cases := []string{ "1000345"}
for _, sig_to_be_deleted := range sigs_delete_cases{
usersUrl = fmt.Sprintf("%s/1/sig/id/%s", server.URL, sig_to_be_deleted) //Grab the address for the API endpoint
request, err := http.NewRequest("DELETE", usersUrl, nil)
res, err := http.DefaultClient.Do(request)

if err != nil {
t.Error(err) //Something is wrong while sending request
}

if res.StatusCode != 200 {
t.Errorf("Tried to delete a reserved Id : ", res.StatusCode) //Uh-oh this means our test failed
}
}


}

最佳答案

我喜欢这样做:

  1. 建立持续集成。如果您的项目是开源的,您可以使用类似 Travis CI 的服务- 安装非常简单。这有助于您了解更改如何影响代码。

  2. 设置代码测试覆盖率。它允许您查看哪些源代码行被测试覆盖,哪些未被测试覆盖,以及哪些地方可能会出现错误。当然,代码覆盖工具也不是万能的。如果检查了线路,并不意味着它绝对没问题,并且不会因其他输入而失败。但它有助于维护良好的代码和查找错误。对于开源,您可以使用 coveralls.io。有一个特别goveralls它的插件。

  3. 为了帮助解决上述问题,您可以使用所谓的模糊测试 - 使用随机输入的探索性测试来找出根本原因。有标准 https://golang.org/pkg/testing/quick/和非标准包https://github.com/dvyukov/go-fuzz .

然后我用测试进行实验,它们都是正面的和负面的。我尝试检查错误、超时、不正确回复的情况。

对于我的测试,我像往常一样使用客户端 http 所以 httptest 包。

关于unit-testing - 在 go 中正确测试 http 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45287975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com