web-dev-qa-db-ja.com

サブディレクトリのGolangテスト

Goでパッケージを作成し、サブディレクトリとしてパッケージのテストと例を使用して、ワークスペースをよりきれいに保ちます。これは可能ですか?

すべてのドキュメントは常にテストコードを他のコードと同じ場所に配置しますが、これは何らかの点で優れているのでしょうか、それとも単なる慣習ですか?

91

cango test "recursively"を実行できることに注意してください。テストするすべてのパッケージをリストする必要があります

あなたがGoプロジェクトのルートフォルダである場合は、次のように入力します。

go test ./...

./...」表記については、「 command go 」の「 パッケージリストの説明 」セクションで説明しています。

インポートパスは、空の文字列やスラッシュを含む文字列など、任意の文字列と一致する1つ以上の「...」ワイルドカードを含む場合のパターンです。

このようなパターンは、パターンに一致する名前を持つGOPATHツリーにあるすべてのパッケージディレクトリに展開されます。

特別な場合として、x/...xおよびxのサブディレクトリと一致します。
たとえば、net/...netに展開され、サブディレクトリにパッケージ化されます。


_test.goファイルをサブフォルダーに保存すると、「go test ./...」コマンドでそれらを取得できます。
しかし:

  • テストファイルがエクスポートされたパッケージコンテンツにアクセスできるようにするには、エクスポートされた変数と関数(テストで使用)の前にパッケージの名前を付ける必要があります。
  • エクスポートされていないコンテンツにはアクセスしません。

そうは言っても、_test.goファイルをメインのソースファイルのすぐ横に置いておくことをお勧めします。見つけるのは簡単です。

155
VonC

file_test.goという名前のファイルの同じディレクトリに、コードと一緒にテストを配置します。ここで、「file」はテストするソースコードファイルの名前です。これは慣習であり、私自身の経験で最高であることがわかりました。

go testツールが十分に自動化されていない場合は、GoConveyを調べてください。従来のGoテストとGoConveyテスト(動作に基づいており、従来のGoテストよりも自己文書化されている)を自動的に更新して実行するWeb UI。

12
Matt

VonCの答えに基づいて、

テストをサブフォルダーに保存したい場合は、testと言ってから実行します

go test ./...

everyフォルダーでテストを実行しようとします。テストが含まれていないものであっても、テスト以外のフォルダーの後続のレポートには?が含まれます。

ランニング

go test ./.../test

代わりにtestフォルダーのみを対象とするため、テストフォルダーのみに焦点を絞ったクリーンなレポートが作成されます。

3
avi.elkharrat

私は通常テストを行いませんが、ファイルをディレクトリにグループ化し、次のようなインポートを使用できます

import "./models" ifが1レベルアウト
import "../models ifは、1レベル出力で1レベル入力

たとえば、次の場合:
./models/todo.go
./test/todo_test.go

todo.goからtodo_test.goをテストするには、todo_test.goでのインポートは

import "../models"

0
Felix Zilla