aetest packageを使用しているとします。 この場合、StronglyConsistentDatastore member of the aetest.Options
structを適切に設定する必要があります。ここで
は一例です:
hello.go
package hello
import (
"fmt"
"net/http"
"time"
"appengine"
datastore "appengine/datastore"
)
type Employee struct {
FirstName string
LastName string
HireDate time.Time
}
func init() {
http.HandleFunc("/", handler)
}
func handler(w http.ResponseWriter, r *http.Request) {
ctx := appengine.NewContext(r)
q := datastore.NewQuery("Employee").Filter("FirstName =", "Antonio")
var people []Employee
if _, err := q.GetAll(ctx, &people); err != nil {
fmt.Fprintf(w, "Error %v", err)
}
fmt.Fprintf(w, "Matches %v", len(people))
}
hello_test.go
package hello
import (
"time"
"testing"
"net/http/httptest"
"appengine"
"appengine/aetest"
datastore "appengine/datastore"
)
const consistency_strong = true; // set to false and the test will fail
func TestMyHandler(t *testing.T) {
options := &aetest.Options{StronglyConsistentDatastore: consistency_strong}
inst, err := aetest.NewInstance(options)
if err != nil {
t.Fatalf("Failed to create instance: %v", err)
}
defer inst.Close()
req, err := inst.NewRequest("GET", "/", nil)
if err != nil {
t.Fatalf("Failed to create req1: %v", err)
}
ctx := appengine.NewContext(req)
employee := &Employee{
FirstName: "Antonio",
LastName: "Salieri",
HireDate: time.Now(),
}
key := datastore.NewIncompleteKey(ctx, "Employee", nil)
_, err = datastore.Put(ctx, key, employee)
if err != nil {
t.Fatalf("Error setting test data: %v", err)
}
w := httptest.NewRecorder()
handler(w, req)
if w.Body.String() != "Matches 1" {
t.Fatalf("Expected 1 record got %v", w.Body)
}
}
あなたは単にdev_appserver.pyラップ行くツールを述べてきたように。
/usr/local/go_appengine/dev_appserver.py --datastore_consistency_policy consistent .
私はgoapp 'からの一貫性を設定するには、おそらく文書化されていない、方法があったことを期待していた:これは、あなたが
aetest
を使用していない場合は、いつものように選択した一貫性ポリシーを使用してアプリケーションを実行できることを意味します'コマンドラインでコード内の新しいインスタンスを開始する必要はありません。あなたの答えは、方法がない、または少なくともあなたがこれを行う方法を知らないことを意味します。 'goapp'コマンドラインから同じ目的を達成する別の方法がありますか? –