首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试Go中依赖动态URL的Handler函数

测试Go中依赖动态URL的Handler函数
EN

Stack Overflow用户
提问于 2015-08-08 01:30:50
回答 2查看 754关注 0票数 1

我一直在寻找答案,但我找不到。我的问题是,是否可以测试依赖动态URL令牌的处理程序函数?

例如,假设我的处理程序函数需要来自动态生成的URL的令牌(我不知道令牌是如何生成的,除了URL参数之外,我也不能访问它)。我的URL总是如下所示:www.example.com/?token=随机标记

代码语言:javascript
复制
func TokenProcessing(w http.ResponseWriter, r *http.Request) {
     token := r.URL.Query().Get("token") // dynamically generated from parsed URL 

      // code to do something with said token

}

是否可以在不访问令牌创建方式的情况下对此处理程序函数进行单元测试?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-08 03:30:47

可以填充http.Request的查询参数,然后用httptest.ResponseRecorder测试处理程序。

例如:

代码语言:javascript
复制
package main

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

// In this test file to keep the SO example concise
func TokenProcessing(w http.ResponseWriter, r *http.Request) {
    token := r.URL.Query().Get("token") // dynamically generated from parsed URL
    // code to do something with said token
    log.Println(token)
}

func TestTokenProcessing(t *testing.T) {
    rr := httptest.NewRecorder()
    r, err := http.NewRequest("GET", "http://golang.org/", nil)
    if err != nil {
        t.Fatal(err)
    }

    // Generate suitable values here - e.g. call your generateToken() func
    r.URL.Query().Add("token", "someval")

    handler := http.HandlerFunc(TokenProcessing)
    handler.ServeHTTP(rr, r)

    if code := rr.Code; code != http.StatusOK {
        t.Fatalf("handler did not return correct status: want %v got %v",
            http.StatusOK, code)
    }

    // Test the rest of the response - i.e. sets a header, etc.
}
票数 2
EN

Stack Overflow用户

发布于 2015-08-08 02:45:09

我能想到的最简单的事情就是创建一个助手函数,它将所有的参数作为处理程序,并将令牌作为参数。然后,您可以对该函数进行单元测试。所以,就像:

代码语言:javascript
复制
func TokenProcessing(w http.ResponseWriter, r *http.Request) {
    token := r.URL.Query().Get("token")
    tokenProcessingHelper(w, r, token)
}

// unit test me!
func tokenProcessingHelper(w http.ResponseWriter, r *http.Request, token string) {
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31888744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档