12

Go と appengine を使用していますが、いくつかのテスト ケースを実行したいと考えています。

go 標準テスト パッケージ Files (どちらも "package hello") を使用してみました:

hello/http.go
hello/http_test.go

問題: を実行できませんgo test hello。私が得た最も近いものは、 をgo test hello/http_test.go呼び出さなくても機能するhttp.goものですが、これはまったく無意味です。:)

4

2 に答える 2

15

github.com/mzimmerman/appenginetesting

インストール

  1. Go をインストールする

  2. Go 環境変数を設定します (パスは異なる場合があります)

    export GOPATH=~/gopath
    export PATH=$PATH:$GOPATH/bin
    
  3. Go 用の Google App Engine SDK をダウンロードする

  4. Google App Engine の環境変数を設定します(パスは異なる場合があります)

    export APPENGINE_SDK=$HOME/appengine
    export PATH=$PATH:$APPENGINE_SDK
    
  5. ディレクトリappengineとディレクトリをappengine_internalシンボリック リンクします。

    ln -s $APPENGINE_SDK/goroot/src/pkg/appengine $GOPATH/src/pkg/
    ln -s $APPENGINE_SDK/goroot/src/pkg/appengine_internal $GOPATH/src/pkg/
    
  6. appenginetestingをインストールする

    go get github.com/mzimmerman/appenginetesting
    

筆記試験

appengintestingは偽物を提供しますappengine.Context。舞台裏 Python 開発サーバーを起動し、それを介してリクエストを実行するため、テストは少し遅くなる可能性があります(ミリ秒ではなく秒単位)。テストで使用するには、次のように記述します

import "github.com/mzimmerman/appenginetesting"
...
c := appenginetesting.NewContext(nil)

その後c、実際の を使用するのと同じように使用できますappengine.Context。これはテスト ファイルでは機能しますが、呼び出して作成したコンテキストでは機能しません。appengine.NewContext(r)

私がgaegoで使用している戦略は、の代わりにカスタムパッケージからコンテキストをインポートすることですappengine. これによりappengine.Context、ビルドが App Engine 用の場合は を使用appenginetesting.Contextし、ビルドがテスト スーツ用の場合は を使用できます。

次のビルド フラグを設定します。

  • context_appengine.go// +build appengine
  • context_testing.go// +build !appengine

コンパイラは、ロードするファイルを決定します。。この技術はゴリラから採用されました

次に、からインポートする代わりにappengine、パッケージからインポートしますEg

import (
  github.com/gaego/context
)

..
c := context.NewContext(r)
..

最後に言及する必要があるのは、明示的にコンテキストを閉じる必要があるということです。そうしないと、python プロセスが引き続き実行されます。次のように呼び出して、プロセスを終了します。

defer c.Close()

その他の例については、次を参照してください。

context_test.go

recorder_test.go

編集:上田卓也が最新の SDK で動作するブランチを作成しました

Edit2: Joshua Marshは、最新の SDK と互換性のあるフォークを維持しています

Edit3: Matt Zimmermanは、標準の aetest パッケージ (ログイン/ログアウト & タスク キュー) に追加機能を備えたフォークを維持しています。

于 2012-07-02T02:51:56.600 に答える
2

興味深い開発: 1.8.6 の時点で、テスト用のサービス スタブの使用が、"appengine/aetest"パッケージを通じて SDK に統合されました。これは、「テスト」コンテキストを介して上記とほぼ同じように機能します。より詳しい情報

于 2013-10-30T07:02:22.027 に答える