Go言語でテストするための適切なパッケージの命名 質問する

Go言語でテストするための適切なパッケージの命名 質問する

Go 内でいくつかの異なるテスト パッケージ命名戦略を見てきましたが、それぞれの長所と短所は何か、どれを使用すべきかを知りたいと思いました。

戦略1:

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

package myfunc

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

package myfunc

見るzip2 形式例えば。

戦略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テスト パッケージに追加するのは面倒です。パッケージのプライベート メソッドをテストできないからです。しかし、私が気づいていない隠れた利点があるのか​​もしれません。

ベストアンサー1

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

プロジェクトで両方の方法を使用することは問題ありません。たとえば、myfunc_whitebox_test.goと を使用できますmyfunx_blackbox_test.go

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

  • ブラックボックステスト:を使用package myfunc_testすると、エクスポートされた識別子
  • ホワイトボックステスト:エクスポートされていない識別子にアクセスできるようにするために使用しますpackage myfunc。エクスポートされていない変数、関数、メソッドにアクセスする必要がある単体テストに適しています。

質問に記載されている戦略の比較

  • 戦略1:ファイルはmyfunc_test.goを使用しますpackage myfunc— この場合、 のテスト コードはmyfunc_test.goでテストされるコードmyfunc.go(myfuncこの例では ) と同じパッケージ内にあります。
  • 戦略2:ファイルでは、テストコードは「別のパッケージとしてコンパイルされ、メインのテストバイナリとリンクされて実行されます。」をmyfunc_test.go使用します。[ソース:package myfunc_testmyfunc_test.goテストソースコード]
  • 戦略3:ファイルはmyfunc_test.goを使用しますpackage myfunc_testが、 はmyfuncドット表記を使用してインポートします — これは戦略 2 のバリエーションですが、 をインポートするためにドット表記を使用しますmyfunc

おすすめ記事