単体テストは、Golang 関数が期待どおりに動作することを確認するために重要です。この記事では、関数のライフサイクルのさまざまな段階での単体テストの戦略について説明します。 テストの初期化と終了: runtime.BeforeAlloc と runtime.AfterAlloc を使用して、メモリ割り当ての前後にセットアップおよびクリーンアップ操作を実行します。テスト関数シグネチャ: テスト パッケージの Test 関数を使用して、特定の関数シグネチャに対するテスト ケースを指定します。テスト コード カバレッジ: go test コマンドの -cover フラグを使用してカバレッジ レポートを生成し、関数のテスト カバレッジを評価します。
Golang 関数のライフ サイクルにおける単体テスト
単体テストは、さまざまな実行パスで Golang 関数が期待どおりに動作することを確認するために重要です。重要な。この記事では、関数のライフサイクルのさまざまな段階で単体テストを実行するための戦略について詳しく説明します。
テストの初期化と終了
Golang 関数のライフサイクルでは、runtime.BeforeAlloc と runtime.AfterAlloc
この関数は、メモリ割り当ての前後に特定の初期化コードと終了コードを実行するために使用されます。これらの関数を使用して、単体テストの開始前後にテストのセットアップおよびクリーンアップ操作を実行できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main
import (
"fmt"
"runtime"
)
func main() {
runtime.BeforeAlloc() // 执行测试前初始化
// 测试代码
runtime.AfterAlloc() // 执行测试后清理
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
testing
パッケージによって提供される Test
関数は、関数の単体テストに使用できます。 。 Test
関数は、関数シグネチャに対するテスト名を使用して、特定のテスト ケースを指定します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main
import (
"testing"
)
func Sum(a, b int) int {
return a + b
}
func TestSum(t *testing.T) {
tests := []struct {
a, b int
want int
}{
{1, 2, 3},
{5, 10, 15},
{-1, 10, 9},
}
for _, test := range tests {
got := Sum(test.a, test.b)
if got != test.want {
t.Errorf("Sum(%d, %d) = %d, want %d", test.a, test.b, got, test.want)
}
}
}
func main() {
testing.Main()
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
単体テストは、コード カバレッジを測定して、関数が適切にテストされたことを確認するためにも使用されます。
go test コマンドは、-cover フラグを使用してカバレッジ レポートを生成できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:shell;toolbar:false;'>go test -cover
coverage:
/path/to/package/func_test.go:62.5% (statements)</pre><div class="contentsignin">ログイン後にコピー</div></div>
単純な加算関数のテスト
関数を考えてみましょう
Add、それ2 つの数値を加算します。次の単体テストでは、Add
がさまざまな入力の下で合計を正しく計算することを確認します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main
import (
"testing"
)
func Add(a, b int) int {
return a + b
}
func TestAdd(t *testing.T) {
tests := []struct {
a, b int
want int
}{
{1, 2, 3},
{5, 10, 15},
{-1, 10, 9},
}
for _, test := range tests {
got := Add(test.a, test.b)
if got != test.want {
t.Errorf("Add(%d, %d) = %d, want %d", test.a, test.b, got, test.want)
}
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
関数を検討します
InitAndTerminate。初期化を実行し、操作を終了します。次の単体テストは、runtime.BeforeAlloc
と runtime.AfterAlloc
を使用してテストされます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main
import (
"fmt"
"runtime"
"testing"
)
func InitAndTerminate() {
fmt.Println("Initializing...")
runtime.BeforeAlloc() // 执行初始化操作
fmt.Println("Terminating...")
runtime.AfterAlloc() // 执行终止操作
fmt.Println("Terminated.")
}
func TestInitAndTerminate(t *testing.T) {
runtime.BeforeAlloc() // 触发自定义初始化
InitAndTerminate() // 执行被测函数
runtime.AfterAlloc() // 触发自定义终止
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
Golang で合格function ライフサイクルのさまざまな段階で単体テストを実行すると、関数の期待される動作がすべての可能な実行パスで確実に検証されます。この記事で説明されている戦略と実践例は、Golang での単体テストの包括的なガイドを提供します。
以上がGolang 関数ライフサイクルでの単体テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。