プログラミング言語 golang golang func Go言語の詳細説明 テスト関数 test関数

Go言語の詳細説明 テスト関数 test関数

 
 
Go 言語には、自動化された単体テストを実行し、出力結果を検証し、パフォーマンスをテストできるテスト パッケージが付属しています。

 

なぜテストする必要があるのですか

完全なテスト システムは、開発の効率を向上させることができます。プロジェクトが十分に複雑な場合、バグを可能な限り減らすには、コード レビューとテストという 2 つの効果的な方法があります。Go 言語は、ユニットを実装するためのテスト パッケージを提供します。テスト機能。

テストルール

単体テストを開始するには、 go ソース コード ファイルを準備する必要があります。ファイルに名前を付けるとき、ファイル名は_test.goで終わる必要があります。単体テスト ソース コード ファイルは、複数のテスト ケースで構成できます (次のように理解できます)。関数)、および各テスト ケースの名前の前に Test を付ける必要があります。次に例を示します。

func TestXxx( t *testing.T ){
    //……
}

テスト ケースを作成するときは、次の点に注意する必要があります。

  • テスト ケース ファイルは通常のソース コードのコンパイルには参加せず、実行可能ファイルには含まれません。
  • テスト ケースのファイル名は_test.goで終わる必要があります。
  • テスト パッケージをインポートするには、import を使用する必要があります。
  • テスト関数の名前はTestまたはBenchmarkで始まり、その後に任意の文字列が続きます。ただし、最初の文字は大文字にする必要があります (例: TestAbc())。テスト ケース ファイルには複数のテスト関数を含めることができます。
  • 単体テストでは(t *testing.T)をパラメーターとして使用し、パフォーマンス テストでは(t *testing.B)をパラメーターとして使用します。
  • テスト ケース ファイルはgo testコマンドを使用して実行されます。main() 関数はソース コードのエントリ ポイントとして必要ありません。ソース コード ファイル内のTestで始まり_test.goで終わる関数はすべて自動的に実行されます。

Go 言語のテスト パッケージでは、単体 (機能) テスト、パフォーマンス (ストレス) テスト、カバレッジ テストの 3 つのテスト方法が提供されます。

単体(機能)テスト

次の図に示すように、同じフォルダーに 2 つの Go 言語ファイルを作成し、それぞれ、demo.go と demt_test.go という名前を付けます。

 

具体的なコードは次のとおりです。

demo.go:

package demo

//長さと幅から面積を取得
func GetArea(weight int、height int) int {
    return weight * height
} 

demo_test.go:

package demo

import "testing"

func TestGetArea(t *testing.T) {
    area := GetArea(40, 50)
    if area != 2000 {
        t.Error("テスト失敗")
    }
} 

テスト コマンドを実行すると、実行結果は次のようになります。

PS D:\code> go test -v
=== RUN   TestGetArea
— PASS: TestGetArea (0.00s)
PASS
ok      _/D_/code       0.435s

パフォーマンス (ストレス) テスト

demo_test.go のコードを次のように変更します。

package demo

import "test"

func BenchMarkGetArea(t *test。B){

    for i:= 0; i <t.N; i ++ {
        GetArea(40,50)
    }
} 

テスト コマンドを実行すると、実行結果は次のようになります。

PS D:\code> go test -bench=”.”
goos: windows
goarch: amd64
BenchmarkGetArea-4      2000000000               0.35 ns/op
PASS
ok      _/D_/code       1.166s

上記の情報は、プログラムが2000000000 回実行され、合計 0.35 ナノ秒かかることを示しています。

カバレッジテスト

カバレッジ テストでは、テスト プログラムでどの程度のビジネス コードがカバーされているか (つまり、demo.go のコードがどの程度、demo_test.go でテストされるか) を知ることができ、可能であれば 100% をカバーすることが最善です。

demo_test.go コードを次のように変更します。

package demo

import "test"

func TestGetArea(t * testing.T){
    area:= GetArea(40,50)
    if area!= 2000 {
        t.Error("テストに失敗しました")
    }
}

func BenchMarkGetArea(t * testing.B){

    for i:= 0; i <t.N; i ++ {
        GetArea(40,50)
    }
} 

テスト コマンドを実行すると、実行結果は次のようになります。

PS D:\code> go test -cover
PASS
coverage: 100.0% of statements
ok      _/D_/code       0.437s

 

「 Go言語の詳細説明 テスト関数 test関数」についてわかりやすく解説!絶対に観るべきベスト2動画

テストのセットアップと Golang での最初のテストの作成 |テストに行く #1
Golang での単体テストの概要
 
 
Go 言語には、自動化された単体テストを実行し、出力結果を検証し、パフォーマンスをテストできるテスト パッケージが付属しています。

 

なぜテストする必要があるのですか

完全なテスト システムは、開発の効率を向上させることができます。プロジェクトが十分に複雑な場合、バグを可能な限り減らすには、コード レビューとテストという 2 つの効果的な方法があります。Go 言語は、ユニットを実装するためのテスト パッケージを提供します。テスト機能。

テストルール

単体テストを開始するには、 go ソース コード ファイルを準備する必要があります。ファイルに名前を付けるとき、ファイル名は_test.goで終わる必要があります。単体テスト ソース コード ファイルは、複数のテスト ケースで構成できます (次のように理解できます)。関数)、および各テスト ケースの名前の前に Test を付ける必要があります。次に例を示します。

func TestXxx( t *testing.T ){
    //……
}

テスト ケースを作成するときは、次の点に注意する必要があります。

  • テスト ケース ファイルは通常のソース コードのコンパイルには参加せず、実行可能ファイルには含まれません。
  • テスト ケースのファイル名は_test.goで終わる必要があります。
  • テスト パッケージをインポートするには、import を使用する必要があります。
  • テスト関数の名前はTestまたはBenchmarkで始まり、その後に任意の文字列が続きます。ただし、最初の文字は大文字にする必要があります (例: TestAbc())。テスト ケース ファイルには複数のテスト関数を含めることができます。
  • 単体テストでは(t *testing.T)をパラメーターとして使用し、パフォーマンス テストでは(t *testing.B)をパラメーターとして使用します。
  • テスト ケース ファイルはgo testコマンドを使用して実行されます。main() 関数はソース コードのエントリ ポイントとして必要ありません。ソース コード ファイル内のTestで始まり_test.goで終わる関数はすべて自動的に実行されます。

Go 言語のテスト パッケージでは、単体 (機能) テスト、パフォーマンス (ストレス) テスト、カバレッジ テストの 3 つのテスト方法が提供されます。

単体(機能)テスト

次の図に示すように、同じフォルダーに 2 つの Go 言語ファイルを作成し、それぞれ、demo.go と demt_test.go という名前を付けます。

 

具体的なコードは次のとおりです。

demo.go:

package demo

//長さと幅から面積を取得
func GetArea(weight int、height int) int {
    return weight * height
} 

demo_test.go:

package demo

import "testing"

func TestGetArea(t *testing.T) {
    area := GetArea(40, 50)
    if area != 2000 {
        t.Error("テスト失敗")
    }
} 

テスト コマンドを実行すると、実行結果は次のようになります。

PS D:\code> go test -v
=== RUN   TestGetArea
— PASS: TestGetArea (0.00s)
PASS
ok      _/D_/code       0.435s

パフォーマンス (ストレス) テスト

demo_test.go のコードを次のように変更します。

package demo

import "test"

func BenchMarkGetArea(t *test。B){

    for i:= 0; i <t.N; i ++ {
        GetArea(40,50)
    }
} 

テスト コマンドを実行すると、実行結果は次のようになります。

PS D:\code> go test -bench=”.”
goos: windows
goarch: amd64
BenchmarkGetArea-4      2000000000               0.35 ns/op
PASS
ok      _/D_/code       1.166s

上記の情報は、プログラムが2000000000 回実行され、合計 0.35 ナノ秒かかることを示しています。

カバレッジテスト

カバレッジ テストでは、テスト プログラムでどの程度のビジネス コードがカバーされているか (つまり、demo.go のコードがどの程度、demo_test.go でテストされるか) を知ることができ、可能であれば 100% をカバーすることが最善です。

demo_test.go コードを次のように変更します。

package demo

import "test"

func TestGetArea(t * testing.T){
    area:= GetArea(40,50)
    if area!= 2000 {
        t.Error("テストに失敗しました")
    }
}

func BenchMarkGetArea(t * testing.B){

    for i:= 0; i <t.N; i ++ {
        GetArea(40,50)
    }
} 

テスト コマンドを実行すると、実行結果は次のようになります。

PS D:\code> go test -cover
PASS
coverage: 100.0% of statements
ok      _/D_/code       0.437s

 

「 Go言語の詳細説明 テスト関数 test関数」についてわかりやすく解説!絶対に観るべきベスト2動画

テストのセットアップと Golang での最初のテストの作成 |テストに行く #1
Golang での単体テストの概要