Golang でテスト可能な関数の例 (関数例)
サンプル関数は単体テスト関数に似ていますが、 *testing 型のパラメーターがありません。関数の例を書くのも簡単です。
- 対応するテスト ファイルを作成する: Go プロジェクトのソース コード ディレクトリに、接尾辞 _test.go が付いた新しいファイル (テストされたコード ファイルと同じパッケージ内) を作成します。たとえば、net パッケージの dial.go でメソッドをテストするには、net パッケージに、単体テスト ファイルと同じ、dial_test.go、net_test.go、または example_test.go という名前のファイルを作成します。
- サンプル関数を作成する: テスト ファイル内で、Example という接頭辞を付けた関数を作成し、その後にテスト ケースの名前を識別する 1 つ以上の文字または文字の組み合わせを記述します (通常は、パッケージ名、関数名、構造体名などの後に文字を続けることもできます)、パラメーターはありません。
- メソッド本体に使用方法を記述し、その内容を標準出力に出力します。メソッド本体の最後に、「出力:」または「順序なし出力:」のコメントを追加できますが、追加する必要はありません。「Output:」注釈が追加された場合、出力は注釈と正確に比較されます。「順序付けされていない出力:」注釈が追加された場合、出力も注釈と比較されますが、行順序は無視されます。出力注釈を追加しないと、サンプル関数はコンパイルされますが、実行されません。
テスト可能な例と関数の例
JSON 形式検証ツール https://github.com/luduoxin/json-validator-go を例に挙げると、バリデーター パッケージの Scanner.go ファイル内のキー関数 Valid は、指定された文字列が JSON 内にあるかどうかを検証するために使用されます。に対応する形式。テスト ファイルはscanner_test.go、内部のサンプル関数はExampleValid、コードは次のとおりです。
func ExampleValid() {
fmt.Println(Valid([]byte("{}")))
// output: true
}
実行して効果を確認します。
=== RUN ExampleValid
--- PASS: ExampleValid (0.00s)
PASS
複数の出力結果の例を参照してください。
func ExampleValid() {
fmt.Println(Valid([]byte("{}")))
fmt.Println(Valid([]byte(`a:b`)))
// output: true
// false
}
実行して効果を確認します。
=== RUN ExampleValid
--- PASS: ExampleValid (0.00s)
PASS
「順序なし出力:」注釈の例を参照してください。
func ExampleValid() {
fmt.Println(Valid([]byte("{}")))
fmt.Println(Valid([]byte(`{"a":"b"}`)))
// Unordered output: true
// true
}
実行して効果を確認します。
=== RUN ExampleValid
--- PASS: ExampleValid (0.00s)
PASS
テストに失敗した例を見てください。
func ExampleValid() {
fmt.Println(Valid([]byte("{}")))
fmt.Println(Valid([]byte(`{"a":"b"}`)))
// Unordered output: true
// false
}
実行して効果を確認します。
=== RUN ExampleValid
--- FAIL: ExampleValid (0.00s)
got:
true
true
出力注釈のない例を参照してください。
func ExampleValid() {
fmt.Println(Valid([]byte("{}")))
}
go test コマンドを実行すると、この機能は実行されません。
上記のテスト例 (実行結果が PASS である例) に合格するとはどういう意味ですか? サンプルの実行時、テスト フレームワークは標準出力に書き込まれたデータをキャプチャし、それを「output:」注釈の結果と比較し、一致する場合はテストに合格し、そうでない場合はテストは失敗します (結果は FAIL)。 。
Godoc でのプレゼンテーション
サンプル関数は、Godoc の対応する関数の例として使用されます。公式 Golang のスクリーンショットを参照してください。
Godoc は、命名規則を使用してサンプル関数をパッケージレベルの識別子に関連付けます。合意されたルールは次のとおりです。
func ExampleFoo() // documents the Foo function or type
func ExampleBar_Qux() // documents the Qux method of type Bar
func Example() // documents the package as a whole
この規則に従って、Godoc は、Reverse 関数のドキュメントと一緒に ExampleReverse の例を表示します。アンダースコアで始まり、その後に小文字が続くサフィックスを使用することで、特定の関数 (またはパッケージ、構造体、メソッドなど) に複数のインスタンスを指定できます。次のように:
func ExampleReverse()
func ExampleReverse_second()
func ExampleReverse_third()
まとめ
この記事では、Golang で簡単に可読性の高いドキュメントに変換できる、Golang でテスト可能なサンプル関数について詳しく説明します これは、Golang が提唱するドキュメントとしてのコードのベストプラクティスでもあります まだ使用したことがない方は、急いでみましょうこれを使って。