[解決済み] Go言語でのテストに適したパッケージの命名法
質問
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.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_test
- この場合、テストコードはmyfunc_test.go
"は別のパッケージとしてコンパイルされ、メインのテストバイナリにリンクされて実行されます。" [出典 の 58-59 行目 test.go ソースコード] を参照してください。 -
戦略3:
ファイル
myfunc_test.go
はpackage myfunc_test
が、インポートされたmyfunc
ドット記法を使う - これは戦略2のバリエーションですが、ドット記法を使ってmyfunc
.
関連
-
[解決済み] mockitoのwhen()呼び出しはどのように動作するのですか?
-
[解決済み] データベース駆動型アプリケーションのユニットテストに最適な戦略とは?
-
[解決済み】Goのタグはどのような用途に使われますか?
-
[解決済み】Angular / TypeScriptのプライベートメソッドのユニットテストをJasmineで記述する方法
-
[解決済み】Arduinoのコードをユニットテストするにはどうしたらいいですか?
-
[解決済み】"testing "パッケージを使用したGoテストで印刷するにはどうすればいいですか?
-
[解決済み] Unit Testsでランダムデータ?
-
[解決済み] Go の testing パッケージを使用してテストのセットアップを行うにはどうすればよいですか?
-
[解決済み] RSpec vs Cucumber (RSpecの話) [終了しました。]
-
[解決済み] 例:無効なutf8文字列?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] mockitoのwhen()呼び出しはどのように動作するのですか?
-
[解決済み] モッキングとは?
-
[解決済み] NUnit vs. MbUnit vs. MSTest vs. xUnit.net [終了しました。]
-
[解決済み】Unit Testsの一般的な命名規則にはどのようなものがありますか?[クローズド]。
-
[解決済み] Spring Dataのリポジトリをテストするには?
-
[解決済み] クロームの拡張機能をテストするには?
-
[解決済み] Visual Studio 2015または2017でユニットテストが検出されない
-
[解決済み] モッキングフレームワークにおけるモッキングとスパイの比較
-
[解決済み] 既存のプロダクションプロジェクトにユニットテストをうまく追加することができますか?もしそうなら、どのように、そして、それは価値があるのでしょうか?
-
[解決済み] Go言語でのテストに適したパッケージの命名法