カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

GAE/Go周りのWeb Application実装関連メモ

概要: 本日のお得情報です。


1. GAE/Goのテストにおいて、appengine.Context に依存するテストは、appengine/aetest パッケージを使う

詳しくはQiitaの、

に載ってるデス。

2. appengine/user#User が必要となるテストは、実際に appengine/user の中身をDumpするサンプルアプリケーションを作ると良い

大体中身としては、

package userid_test

import (
    "appengine"
    "appengine/user"
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/google_user", loginWithGoogleAccount)
}

func loginWithGoogleAccount(rw http.ResponseWriter, req *http.Request) {
    c := appengine.NewContext(req)
    u := user.Current(c)

    if u == nil {
        fmt.Fprint(rw, "not login")
        return
    }

    fmt.Fprintf(rw, "Email:%v\nAuthDomain: %v\nAdmin: %v\nID: %v", u.Email, u.AuthDomain, u.Admin, u.ID)
}

という感じのGAE/Go Web Applicationを書き、実際にログインした状態がどういう感じか、というのを把握しておくと、appengine/user#User に依存するテストが書き易いよ! って話です。

3. GAE/GoでWeb Applicationを書く際には、appengine 関連パッケージに依存する実装部分と、Web Applicationとして必要なInterfaceを分離しておくと良い

と勝手に思ってるんですが、これはどういうことか、というと、例えばモデル部分で言えば、

  1. モデルの操作に関するメソッドは interface 型で定義し
  2. appengine/datastore に依存する実装は別パッケージに分けておくと
  3. あとで、他のデータストア(例えばMySQLとか)に移り易い

という感じです。はい。

と言うコトで

今日は以上です、はい。