概要: 本日のお得情報です。
1. GAE/Go のテストにおいて、appengine.Context
に依存するテストは、appengine/aetest
パッケージを使う
詳しくは Qiita の、
Go - gae/g unit testing - 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 を分離しておくと良い
と勝手に思ってるんですが、これはどういうことか、というと、例えばモデル部分で言えば、
- モデルの操作に関するメソッドは
interface
型で定義し appengine/datastore
に依存する実装は別パッケージに分けておくと- あとで、他のデータストア(例えば MySQL とか)に移り易い
という感じです。はい。
と言うコトで
今日は以上です、はい。