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

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

DDD
DDDオリジナル
2024-10-25 15:55:02118ブラウズ

Can You Call Go Test Functions From Non-Test Files?

非テスト ファイルからのテスト関数の呼び出し

Go では、テストは特定の規則と方法論に依存します。これらの規則の 1 つは、テストを独自のテスト ファイルに分割し、「_test.go」サフィックスで終わる必要があるというものです。

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

短い答え: いいえ。

ご質問とは異なり、テスト関数は非テスト Go ファイルから直接呼び出すことはできません。この分離により、テストがテスト対象のコードから区別され独立していることが保証されます。

Go のテスト パターン

Go は主に 2 種類の単体テストを採用します。

  • ブラックボックス テスト: エクスポートされたパブリック関数を評価し、外部呼び出し元が関数と対話する方法を模倣します。
  • ホワイトボックス テスト: プライベートの評価、同じパッケージ内のエクスポートされていない関数を使用して、内部操作についてのより深い洞察を提供します。

エクスポートされた「Sum」を含む次の「例」パッケージを考えてみましょう。関数とエクスポートされていない "add" 関数:

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
}

ブラックボックス テスト (example_test.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()
        }
    }
}

ホワイトボックス テスト(example_internal_test.go):

package example_test

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()
        }
    }
}

結論として、非テスト ファイルからテスト関数を呼び出すことは Go テストの原則に違反します。単体テストの目的には、確立されたワークフローと規則に従って、個別のテスト パッケージを使用する必要があります。

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

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