ワークスペースをよりクリーンに保つために、サブディレクトリとしてパッケージのテストと例を含むパッケージをGoで作成したいと考えています。これは可能ですか?可能な場合、どのようにですか?
すべてのドキュメントでは常にテストコードを他のコードと同じ場所に配置していますが、これは何らかの方法で、または単に慣例の方が優れていますか?
ワークスペースをよりクリーンに保つために、サブディレクトリとしてパッケージのテストと例を含むパッケージをGoで作成したいと考えています。これは可能ですか?可能な場合、どのようにですか?
すべてのドキュメントでは常にテストコードを他のコードと同じ場所に配置していますが、これは何らかの方法で、または単に慣例の方が優れていますか?
回答:
「再帰的に」実行できることに注意してください。テストするすべてのパッケージgo testをリストする必要があります。
Goプロジェクトのルートフォルダーにいる場合は、次のように入力します。
go test ./...
「./...」表記については、「コマンド」の「パッケージリストの説明」セクションで説明しています。go
インポートパスには
...、空の文字列やスラッシュを含む文字列を含む任意の文字列に一致する" "ワイルドカードが1つ以上含まれている場合、パターンになります。このようなパターンは
GOPATH、名前がパターンに一致するツリー内にあるすべてのパッケージディレクトリに展開されます。特殊なケースとして、のサブディレクトリと同様に
x/...一致xしますx。
たとえば、サブディレクトリにnet/...展開しnetてパッケージ化します。
あなたが続ける場合は_test.go、サブフォルダ内のファイルを、「go test ./...」コマンドは、それらを拾うことができるようになります。
だが:
そうは言っ_test.goても、メインのソースファイルのすぐ横にファイルを置いておくことをお勧めします。
テストをコードと一緒に同じディレクトリのファイルと呼ばれるファイルに置きますfile_test.go。「file」はテストするソースコードファイルの名前です。これは慣習であり、私自身の経験ではこれが最良であることがわかりました。
go testツールが十分に自動化されていない場合は、従来のGoテストとGoConveyテスト(動作に基づいており、より自己文書化されている)だけでなく、従来のGoテストを自動的に更新して実行するWeb UIを備えたGoConveyを調べることもできます。従来のGoテストよりも)。
go testサブフォルダでも機能します。以下の私の回答を
編集済み
VonCの答えに基づいて、
この回答はで有効ですgo1.11。上位goバージョンではまだテストされていません。
テストをサブフォルダに保存したいtest場合は、と言ってから実行します
go test ./...
テストを含まないものも含めて、すべてのフォルダーでテストを実行しようとする?ため、非テストフォルダーの後続のレポートにがあります。
ランニング
go test ./.../test
代わりに、testフォルダーのみを対象とするため、テストフォルダーのみに焦点を当てた明確なレポートが作成されます。
注意
テストサブフォルダを使用すると、カバレッジレポートの計算ができなくなることに注意してください。goの哲学は、テストファイルをパッケージフォルダーに残すことです。
go test ./.../testリターンはgo: warning: "./.../test" matched no packages//テストフォルダーをターゲットだけではありません。goバージョンgo1.13 darwin / amd64
通常はテストしませんが、ファイルをディレクトリにグループ化して、次のようにインポートすることができます
import "./models"if 1レベルout
import "../modelsif 1レベルout and one level in
たとえば、次の場合:
./models/todo.go
./test/todo_test.go
テストにtodo.goからtodo_test.go、であなたのインポートがtodo_test.go可能になります
import "../models"
go test ./...現在のフォルダーとすべてのサブフォルダーでテストを実行します。以下の私の回答を