21586


golangで下記のようなhttpのテストを書いているのですが、httptestにおいてhandlerにRESTのurl（`/item/{item_id}`)に埋め込んだ値(`item_id`)を渡すにはどうしたらいいですか？

テストコード

[code]

    func TestHandler(t *testing.T) {
        handler := func(w http.ResponseWriter, r *http.Request) {
            vars := mux.Vars(r)
            itemID := vars["item_id"]
            fmt.Println("itemID: ", itemID)
        }
    
        http.HandleFunc("/item/{item_id}", handler)
        testserver := httptest.NewServer(http.HandlerFunc(handler))
        defer testserver.Close()
    
        req, err := http.NewRequest("PUT", testserver.URL, nil)
        if err != nil {}
    
        var client http.Client
        client.Do(req)
    }
    
[/code]

コマンド

$ go test ./... -v

実行結果

[code]

    === RUN   TestHandler
    itemID:  
    --- PASS: TestHandler (0.00s)
    
[/code]

例えば、この実行結果の部分で`itemID`を出力させたいです。


CC BY-SA 3.0
2016-02-01T08:17:09.013
21570
2016-02-01T14:43:40.937
2020-06-17T08:14:45.997
-1
8558
question
go テスト
Goのhttptestにおいてhandlerに値を渡したい


`gorilla/mux` パッケージを使うのでしたら、`$GOPATH/src/github.com/gorilla/mux/mux_test.go`
に参考にしてテストコードを書いてみてはどうでしょうか。以下はその一例です。

**handler_test.go**

[code]

    func TestHandler(t *testing.T) {
      handler := func(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        itemID := vars["item_id"]
        fmt.Println("itemID: ", itemID)
      }
    
      router := mux.NewRouter()
      router.HandleFunc("/item/{item_id}", handler)
    
      req, _ := http.NewRequest("PUT", "http://localhost/item/no_001", nil)
      res := new(http.ResponseWriter)
      router.ServeHTTP(*res, req)
    }
    
[/code]

**実行結果**

[code]

    $ go test -v handler_test.go
    === RUN   TestHandler
    itemID:  no_001
    --- PASS: TestHandler (0.00s)
    
[/code]


CC BY-SA 3.0
2016-02-01T14:43:40.937
21586
2016-02-01T14:43:40.937
21570
answer