サブディレクトリ内のGolangテスト 質問する

サブディレクトリ内のGolangテスト 質問する

ワークスペースを整理するために、パッケージのテストと例をサブディレクトリとして含むパッケージを Go で作成したいと考えています。これは可能ですか? 可能であれば、どのようにすればよいですか?

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

ベストアンサー1

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

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

go test ./...

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

インポート パスは、...空の文字列やスラッシュを含む文字列を含む任意の文字列に一致する 1 つ以上の " " ワイルドカードが含まれている場合、パターンになります。

このようなパターンは、GOPATHパターンに一致する名前を持つツリー内で見つかったすべてのパッケージ ディレクトリに拡張されます。

特殊なケースとして、は のサブディレクトリとx/...一致します。たとえば、は に展開され、そのサブディレクトリ内のパッケージになります。xx
net/...net


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

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

_test.goそうは言っても、ファイルをメインのソース ファイルのすぐ横に置いておく方が見つけやすいので、好ましいと思います。


2022: コードカバレッジの場合:

go test -coverpkg=./... ./...

Frédéric G. MARANDの「時間の経過に伴う Go テスト カバレッジのプロット方法」を参照し、Go プロジェクトの CI 統合の集計カバレッジ統計を生成します。fgmarand/gocoverstats

また、go-cover-treemap.io楽しいです。


2023 年 3 月: 「 Go 統合テストのコード カバレッジ」に記載されているとおり:

1.20 リリースでは、Go のカバレッジ ツールはパッケージ テストに限定されなくなり、より大規模な統合テストからのプロファイルの収集をサポートするようになりました。

例:

$ go build -cover -o myprogram.exe myprogram.go
$ mkdir somedata
$ GOCOVERDIR=somedata ./myprogram.exe
I say "Hello, world." and "see ya"
$ ls somedata
covcounters.c6de772f99010ef5925877a7b05db4cc.2424989.1670252383678349347
covmeta.c6de772f99010ef5925877a7b05db4cc

Go 1.20 カバーを参照してください。


コメントkbolinoが指摘したように:

テストを別のディレクトリに置かずに、別のパッケージに置くことができます。
パッケージ foo のテスト ファイルはパッケージ内にあっfoo_testて同じディレクトリに置けますが、パッケージのエクスポートされていない(プライベートな) メンバーにはアクセスできませんfoo

おすすめ記事