1. ホーム
  2. unit-testing

[解決済み] Go言語でのテストに適したパッケージの命名法

2022-06-27 23:20:58

質問

Go の中でいくつかの異なるテスト パッケージの命名戦略を目にしました。それぞれの長所と短所、そしてどれを使うべきかを知りたいと思いました。

戦略 1:

ファイル名:github.com/user/myfunc.go

package myfunc

テストファイル名:github.com/user/myfunc_test.go

package myfunc

参照 bzip2 を参照してください。

戦略2.

ファイル名:github.com/user/myfunc.go

package myfunc

テストファイル名:github.com/user/myfunc_test.go

package myfunc_test

import (
    "github.com/user/myfunc"
)

参照 ワイヤー を参照してください。

戦略3.

ファイル名:github.com/user/myfunc.go

package myfunc

テストファイル名:github.com/user/myfunc_test.go

package myfunc_test

import (
    . "myfunc"
)

参照 文字列 を参照してください。

Goの標準ライブラリは、戦略1と2を混合して使用しているようです。3つのうちどれを使えばいいのでしょうか?を追加するのは面倒です。 package *_test を追加することは、パッケージのプライベートメソッドをテストできないことを意味するので苦痛ですが、私が気づいていない隠れた利点があるのかもしれません。

どのように解決するのですか?

あなたが挙げた 3 つの戦略の根本的な違いは、テスト コードがテスト対象のコードと同じパッケージ内にあるかどうかです。を使うかどうかの判断は package myfunc または package myfunc_test を実行するかどうかによって、テストファイルの ホワイトボックス または ブラックボックス をテストすることができます。

プロジェクトで両方の方法を使うことは何も悪いことではありません。例えば myfunc_whitebox_test.gomyfunx_blackbox_test.go .

テストコードパッケージの比較

  • ブラックボックステスト。 使用方法 package myfunc_test のみを使用していることを確認します。 エクスポートされた識別子 .
  • ホワイトボックステストです。 使用方法 package myfunc を使って、エクスポートされない識別子にアクセスできるようにします。非エクスポートの変数、関数、メソッドにアクセスする必要があるユニットテストに適しています。

質問で挙げられた戦略の比較

  • 戦略1: ファイル myfunc_test.gopackage myfunc - この場合、テストコードは myfunc_test.go でテストされるコードと同じパッケージになります。 myfunc.go でテストされるコードと同じパッケージであり、それは myfunc のように、この例では
  • 戦略2です。 ファイル myfunc_test.gopackage myfunc_test - この場合、テストコードは myfunc_test.go "は別のパッケージとしてコンパイルされ、メインのテストバイナリにリンクされて実行されます。" [出典 の 58-59 行目 test.go ソースコード] を参照してください。
  • 戦略3: ファイル myfunc_test.gopackage myfunc_test が、インポートされた myfunc ドット記法を使う - これは戦略2のバリエーションですが、ドット記法を使って myfunc .