2016-04-08 9 views
1

GoogleのAppEngineサービスは、最終的に一貫性のあるデータベースを提供しています。テストのために、Googleは本番データベースの一貫性の特性をエミュレートする同様のデータベースを提供します。テストの要件は、Googleがコマンド・ライン・パラメータをテスト・サーバに提供するように、異なる場合があります。dev_appserver.pyは、テストのために必要に応じて整合性の特性を変更します。"goapp test"を使用して一貫性を変更できない

goappツールを使用して、私のAppEngine開発用の自動テスト環境を実行しています。 goapp testは、自動サーバーAPIテストの実行を担当します。 goapp testは、dev_appserver.pyとは異なり、テストプロセス中のある時点でgoapp testdev_appserver.pyを起動しても、コマンドラインパラメータを使用してデータストアの整合性レベルを設定する方法はありません。

dev_appserver.pyにコマンドラインパラメータを渡す方法はありますか?goapp test?そうでない場合は、コマンドラインから一貫性を設定する別の方法がありますか?

答えて

0

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 .

+0

私はgoapp 'からの一貫性を設定するには、おそらく文書化されていない、方法があったことを期待していた:これは、あなたがaetestを使用していない場合は、いつものように選択した一貫性ポリシーを使用してアプリケーションを実行できることを意味します'コマンドラインでコード内の新しいインスタンスを開始する必要はありません。あなたの答えは、方法がない、または少なくともあなたがこれを行う方法を知らないことを意味します。 'goapp'コマンドラインから同じ目的を達成する別の方法がありますか? –

関連する問題