ホームページ  >  記事  >  バックエンド開発  >  Go でテスト ファイルの外部からテスト関数を呼び出すことはできますか?

Go でテスト ファイルの外部からテスト関数を呼び出すことはできますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 06:32:02973ブラウズ

Can You Call a Test Function from Outside a Test File in Go?

テスト ファイルの外部からテスト関数を呼び出すことはできますか?

Go では、通常、単体テストは go test を使用して実行されます。これは、 でマークされたテスト関数を識別して実行します。 testing.T パラメータ。ただし、次のような疑問が生じます: テスト以外のファイルからテスト関数を呼び出して、テストの実行を開始できますか?

答え: フレームワークの制限

残念ながら、答えはノーです。 Go のテスト フレームワークは、テスト コードと非テスト コードを強制的に分離するように設計されています。テスト関数はテスト ファイル内からのみ呼び出す必要があり、テスト対象のユニットは適切なパッケージからインポートする必要があります。

Go のテスト パターン

Go は 2 つの主要なテスト パターンをサポートしています。

  • ブラックボックス テスト: パッケージの外部からエクスポートされた関数をテストし、他のパッケージが関数とどのように対話するかをシミュレートします。
  • ホワイトボックス テスト: パッケージ内からエクスポートされていない関数をテストし、内部実装の詳細へのアクセスを提供します。

実践

追加ユーティリティ関数とエクスポートされた Sum を含む example という名前のサンプル パッケージを考えてみましょう。内部の追加関数を利用する関数。

example.go: エクスポートされた関数とエクスポートされていない関数を含むパッケージ

<code class="go">package example

func Sum(nums ...int) int {
    sum := 0
    for _, num := range nums {
        sum = add(sum, num)
    }
    return sum
}

func add(a, b int) int {
    return a + b
}</code>

example_test.go でのブラック ボックス テスト

<code class="go">package example_test

import (
    "testing"

    "example"
)

func TestSum(t *testing.T) {
    tests := []struct {
        nums []int
        sum  int
    }{
        {nums: []int{1, 2, 3}, sum: 6},
        {nums: []int{2, 3, 4}, sum: 9},
    }

    for _, test := range tests {
        s := example.Sum(test.nums...)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>

example_internal_test.go でのホワイトボックス テスト

<code class="go">package example

import "testing"

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

    for _, test := range tests {
        s := add(test.a, test.b)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>

結論として、テスト コードと非テスト コードは設計的に分離されているため、テスト ファイルの外部からテスト関数を呼び出すことはできません。囲碁で。単体テストは常に go test コマンドを使用して実行する必要があり、懸念事項を確実に分離し、意図しないコードの実行を防ぎます。

以上がGo でテスト ファイルの外部からテスト関数を呼び出すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。