26

Web API 用にいくつかのパッケージを実装しました。それぞれに独自のテスト ケースがあります。各パッケージがgo test ./api/pkgnameテスト パスを使用してテストされるとき。テストケースですべてのテストを一度に実行したいgo test ./api/...場合、常に失敗します。

各テスト ケースでは、すべての移行を使用してスキーマ全体を再作成し、適用しますDROP SCHEMA public CASCADECREATE SCHEMA publicテストスイートは、リレーション/テーブルが存在しないというエラーをランダムに報告するため、各テストスイート (パッケージごと) が何らかの形で並行して実行され、DB の状態が台無しになっていると思います。

成功しないなど、いくつかのテストフラグを渡そうとしgo test -cpu 1 -parallel 0 ./src/api/...ました。

ここでの問題は、テストが並行して実行されている可能性がありますか? はいの場合、シリアル実行を強制するにはどうすればよいですか?

アップデート:

現在、この回避策を使用してテストを実行していますが、より良い解決策があるかどうかはまだ疑問です

find <dir> -type d -exec go test {} \;
4

3 に答える 3

38

他の人が指摘しているように、 -parallel は仕事をしません(パッケージ内でのみ機能します)。ただし、フラグ -p=1 を使用して、一連のパッケージ テストを実行できます。これはここに文書化されています:

http://golang.org/src/cmd/go/testflag.go

しかし、(事実)コマンドラインではなく、助けに行くなどです。それが固執することを意図しているのかどうかはわかりません(削除された場合、 -parallel を修正する必要があると私は主張しますが)。

于 2013-10-03T18:40:57.203 に答える
3

明確にするために、@ Jeremyの答えはまだ受け入れられています:

私の統合テストは 1 つのパッケージ ( ) でのみ実行されたのでapi、最終的に個別のテスト バイナリを削除し、次の方法でテスト タイプを分離するパターンを作成しました。

  • 単体テストは通常​​のTestX名前を使用します
  • 統合テストの使用Test_X

これらのいずれかを実行するシェル スクリプト ( utest.sh/ ) を作成しました。itest.sh

  • 単体テスト用go test -run="^(Test|Benchmark)[^_](.*)"
  • 統合テスト用go test -run"^(Test|Benchmark)_(.*)"
  • 通常を使用して両方を実行しますgo test
于 2013-10-02T10:05:57.637 に答える