[追記] 1.8.6 からSDKに単体テストのためのパッケージが追加されました。
詳しくは http://najeira.blogspot.jp/2013/10/google-app-engine-186-go.html を読んでください。
----
Google App Engine Go で単体テストするためのパッケージを作りました。
詳しくは http://najeira.blogspot.jp/2013/10/google-app-engine-186-go.html を読んでください。
----
Google App Engine Go で単体テストするためのパッケージを作りました。
こんな感じでテストを書けます。
package yourapp import ( "appengine/datastore" "net/http" "testing" "github.com/najeira/testbed" ) const ( PYTHON = `/usr/local/bin/python27` TESTBED = `/usr/local/google_appengine/goroot/src/pkg/github.com/najeira/testbed/testbed.py` APPENGINE = `/usr/local/google_appengine` ) func TestAllocateIDs(t *testing.T) { bed := testbed.NewTestbed(PYTHON, TESTBED, APPENGINE) bed.Start() defer bed.Close() // create a dummy context r, _ := http.NewRequest("GET", "http://example.com/", nil) c := bed.NewContext(r) // write your test codes here low, high, err := datastore.AllocateIDs(c, "Test", nil, 10) if err != nil { t.Errorf("got error: %v", err) } if high - low != 10 { t.Errorf("wrong values: %d, %d", low, high) } }
もともとAppEngine GoのSDKでは、Python版の開発サーバを動かしGo言語側とAPI経由で通信して動くようになっています。これは、Datastore等のAppEngineのスタブがPythonで実装されており、Go版がないためです。
このため、Go言語単体では、AppEngineのAPIを使った単体テストを行うことができませんでした。
このGo言語の testbed パッケージでは、Pythonのプロセスを起動してスタブを準備させ、Go言語側からプロセス間通信で呼び出してAPIを使えるようにしました。
Pythonを起動しないといけないので、環境に応じた引数を受け取らないと動きません。ここがダサいので、何かいい方法があれば pull request お待ちしております。
0 件のコメント:
コメントを投稿