Golang 単体テストでカバレッジ ツールを使用するにはどうすればよいですか?

WBOY
リリース: 2024-06-02 15:55:01
オリジナル
918 人が閲覧しました

go test -cover コマンドを使用して Go 単体テストでカバレッジを測定し、-cover または -coverprofile オプションを指定して結果を生成します。 -covermode オプションはカバレッジ モード (セット、カウント、またはアトミック) を設定します。実際のケースでは、カバレッジ設定ファイルと go ツールの cover コマンドを使用してテストを作成し、カバレッジ レポートを生成する方法を示します。

如何在 Golang 单元测试中使用覆盖工具?

Golang 単体テストでカバレッジ ツールを使用してカバレッジをテストする方法

カバレッジ ツールは、コードの未テスト部分を特定するのに役立つため、単体テストにおいて非常に重要です。これは、コードの品質と信頼性を確保するために重要です。 Golang では、go test -cover コマンドを使用して単体テストのカバレッジを測定できます。 go test -cover 命令来测量单元测试中的覆盖率。

安装覆盖工具

要在 Golang 中使用覆盖工具,您需要安装它。您可以使用以下命令进行安装:

go install golang.org/x/tools/cmd/cover
ログイン後にコピー

测量覆盖率

要测量单元测试的覆盖率,请使用 go test 命令并指定 -cover 标志。该标志随后可以接受以下值:

  • -cover:显示覆盖结果,包括未覆盖的行、文件和包。
  • -coverprofile=profile.out:将覆盖结果写入指定的文件中。这对于进一步分析或与其他工具一起使用很有用。
  • -covermode=mode:设置覆盖模式。可接受的值包括:

    • set:使用 set 模式报告覆盖情况。它将为每个被覆盖的代码行分配一个计数器,并在测试完成后生成报告。
    • count:使用 count 模式报告覆盖情况。它将为每个被覆盖的代码行分配一个 boolean 值,并在测试完成后生成报告。
    • atomic:使用原子计数模式报告覆盖情况。它将为每个被覆盖的代码行分配一个 int64 计数器,并在测试完成后生成报告。

实战案例

以下是一个演示如何测量 Golang 单元测试中覆盖率的简要示例:

main.go

package main

import (
    "fmt"
    "strconv"
)

// Add two numbers
func Add(a, b int) int {
    return a + b
}

// Convert a string to a number
func StrToInt(s string) int {
    n, err := strconv.Atoi(s)
    if err != nil {
        fmt.Println(err.Error())
        return 0
    }
    return n
}
ログイン後にコピー

main_test.go

package main

import (
    "testing"
)

func TestAdd(t *testing.T) {
    tests := []struct {
        a int
        b int
        want int
    }{
        {1, 2, 3},
        {0, 0, 0},
        {-1, -1, -2},
    }

    for _, tt := range tests {
        t.Run(fmt.Sprintf("TestAdd%d_%d", tt.a, tt.b), func(t *testing.T) {
            if got := Add(tt.a, tt.b); got != tt.want {
                t.Errorf("Add(%d, %d) = %d, want %d", tt.a, tt.b, got, tt.want)
            }
        })
    }
}

func TestStrToInt(t *testing.T) {
    tests := []struct {
        s string
        want int
    }{
        {"1", 1},
        {"0", 0},
        {"-1", -1},
    }

    for _, tt := range tests {
        t.Run(fmt.Sprintf("TestStrToInt%s", tt.s), func(t *testing.T) {
            if got := StrToInt(tt.s); got != tt.want {
                t.Errorf("StrToInt(%s) = %d, want %d", tt.s, got, tt.want)
            }
        })
    }
}

func TestCoverage(t *testing.T) {
    t.Run("Add", func(t *testing.T) {
        coverProfile := "add_coverage.out"
        args := []string{"-test.coverprofile=" + coverProfile, "-test.covermode=set"}
        cmd := exec.Command("go", "test", args...)
        if err := cmd.Run(); err != nil {
            t.Fatalf("Could not run coverage test: %v", err)
        }
    })

    t.Run("StrToInt", func(t *testing.T) {
        coverProfile := "str_int_coverage.out"
        args := []string{"-test.coverprofile=" + coverProfile, "-test.covermode=set"}
        cmd := exec.Command("go", "test", args...)
        if err := cmd.Run(); err != nil {
            t.Fatalf("Could not run coverage test: %v", err)
        }
    })
}
ログイン後にコピー

在命令行中执行以下命令以生成覆盖率报告:

go test -test.coverprofile=coverage.out
ログイン後にコピー

这将在 coverage.out 文件中创建一个覆盖率报告。您可以使用 go tool cover

カバレッジツールのインストール

🎜🎜Golangでカバレッジツールを使用するには、カバレッジツールをインストールする必要があります。次のコマンドを使用してインストールできます: 🎜
go tool cover -html=coverage.out
ログイン後にコピー
🎜🎜カバレッジの測定🎜🎜🎜単体テストのカバレッジを測定するには、go test コマンドを使用し、-cover を指定します。フラグ 。このフラグは次の値を受け入れることができます: 🎜
  • 🎜-cover🎜: カバーされていない行、ファイル、パッケージを含むカバレッジ結果を表示します。
  • 🎜-coverprofile=profile.out🎜: カバレッジ結果を指定されたファイルに書き込みます。これは、さらなる分析や他のツールとの併用に役立ちます。
  • 🎜🎜-covermode=mode🎜: カバレッジ モードを設定します。許容される値は次のとおりです: 🎜
    • 🎜set🎜: カバレッジをレポートするにはセット モードを使用します。対象となるコード行ごとにカウンターが割り当てられ、テスト完了後にレポートが生成されます。
    • 🎜count🎜: カバレッジをレポートするにはカウント モードを使用します。対象となるコード行のそれぞれにブール値が割り当てられ、テストの完了後にレポートが生成されます。
    • 🎜atomic🎜: アトミック カウンティング モードを使用してカバレッジをレポートします。カバーされたコードの各行に int64 カウンターが割り当てられ、テストの完了後にレポートが生成されます。
🎜🎜実際的なケース🎜🎜🎜これは、Golang 単体テストでカバレッジを測定する方法を示す簡単な例です: 🎜🎜🎜main.go🎜🎜rrreee🎜🎜 main_test .go🎜🎜rrreee🎜 コマンド ラインで次のコマンドを実行してカバレッジ レポートを生成します。 🎜rrreee🎜 これにより、coverage.out ファイルにカバレッジ レポートが作成されます。 go tool cover コマンドを使用してレポートを表示できます: 🎜rrreee🎜これにより、ブラウザで HTML レポートが開き、カバーされていない行とファイルが表示されます。 🎜

以上がGolang 単体テストでカバレッジ ツールを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!