测试golang的Web应用程序查询参数的最佳做法

亨德利:

在两个必需参数的简单情况下,有四个可能的测试用例IIUC:

  1. 都是空的
  2. 第一盘但第二盘
  3. 第二组但不是第一组
  4. 都设置

什么是最佳实践,请对所有四种情况进行测试?

因为即使在Golang中测试第一个和最后一个案例也很冗长:

func TestGoodParameter(t *testing.T) {

        req, _ := http.NewRequest("GET", "/", nil)

        q := req.URL.Query()
        q.Add("first", "foo")
        q.Add("second", "bar")
        req.URL.RawQuery = q.Encode()

        rec := httptest.NewRecorder()
        root(rec, req)
        res := rec.Result()

        if res.StatusCode != http.StatusOK {
                t.Errorf("got %v, expected %v", res.StatusCode, http.StatusOK)
        }

}

func TestBadParameter(t *testing.T) {

        req, _ := http.NewRequest("GET", "/", nil)

        rec := httptest.NewRecorder()
        root(rec, req)
        res := rec.Result()

        if res.StatusCode != http.StatusBadRequest {
                t.Errorf("got %v, expected %v", res.StatusCode, http.StatusBadRequest)
        }

}

还是我在这里缺少一些技巧?当说有五个参数(其中两个是可选参数)时,显然变得更加复杂!

s7anley:

定义您的测试用例表驱动方式,并为其编写一个实现。您可以通过省略测试用例的名称来简化定义。

package main

import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestParameters(t *testing.T) {
    testCases := map[string]struct {
        params map[string]string
        statusCode int
    }{
        "good params": {
            map[string]string{
                "first": "foo", "second": "bar",
            },
            http.StatusOK,
        },
        "without params": {
            map[string]string{},
            http.StatusBadRequest,
        },
    }

    for tc, tp := range testCases {
        req, _ := http.NewRequest("GET", "/", nil)
        q := req.URL.Query()
        for k, v := range tp.params {
            q.Add(k, v)
        }
        req.URL.RawQuery = q.Encode()
        rec := httptest.NewRecorder()
        root(rec, req)
        res := rec.Result()
        if res.StatusCode != tp.statusCode {
            t.Errorf("`%v` failed, got %v, expected %v", tc, res.StatusCode, tp.statusCode)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在测试期间在 Web 应用程序的页面上定位组件的最佳做法是什么?

在Android应用程序中查询在线数据的最佳做法?

Web应用程序中令牌认证的最佳做法?

基于http调用测试Web应用程序的最佳实践

在Web应用程序中对用户约束进行建模的最佳做法?

最佳做法:如何使用Angular隐藏Web应用程序中的元素

Blazor应用程序重新部署的最佳做法

iOS应用程序安全性最佳做法

测试Web应用程序

Java Web应用程序最佳实践

最佳的Java Web应用程序框架?

如何在Golang应用程序中使用多个JSON参数创建SQL查询?

如何正确测试Web应用程序?

自动,包含测试的Web应用程序

压力测试AWS Web应用程序

JMeter 负载测试 Web 应用程序

Golang生产Web应用程序配置

什么是基于Swing的应用程序的最佳测试工具?

测试仅知道其功能的应用程序的最佳方法

React Redux 应用程序中集成测试的最佳实践?

全局Web应用程序参数

C#Web Api-返回DTO时移动应用程序的最佳做法?多个请求还是一次返回所有内容?

从非Web应用程序发送查询字符串参数

在Android应用程序中进行身份验证和授权的最佳做法

在Android中向用户解锁应用程序功能的最佳做法是什么?

带有picocli的可扩展应用程序。最佳做法问题

当应用程序进入后台时,Firestore快照侦听器的最佳做法是什么?

哪种最佳做法为Django应用程序添加安全标头?

Python Gtk Glade应用程序结构。最佳做法是什么?