質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

1回答

2245閲覧

Goのhttptestにおいてhandlerに値を渡したい

KeitaSuzuki

総合スコア15

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

0グッド

0クリップ

投稿2016/02/01 06:50

質問

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

テストコード

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

コマンド

$ go test ./... -v

実行結果

=== RUN TestHandler itemID: --- PASS: TestHandler (0.00s)

この実行結果の部分でitemIDを出力させたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

gorilla/muxパッケージを使っているという事でよろしいでしょうか。
gorilla/muxを使うなら、httpではなく、muxでルーティングするのが楽です。

また、item_idという文字列をではなく、何らかのIDとなる数字や文字を表示するという事ですね?
idを正規表現でルーティングする必要があります。
例えばitemIdが数字で渡されるとすると次の様にルーティングします。

go

1 r := mux.NewRouter() 2 r.HandleFunc("/{item}/", ArticleHandler).Methods("POST") 3 r.HandleFunc("/{item}/{id:[0-9]+}", handler)

投稿2016/02/11 14:03

shanxia

総合スコア1038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問