首頁  >  文章  >  後端開發  >  可以從非測試檔案呼叫 Go 測試函數嗎?

可以從非測試檔案呼叫 Go 測試函數嗎?

DDD
DDD原創
2024-10-25 15:55:02118瀏覽

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

從非測試檔案呼叫測試函數

在 Go 中,測試依賴於特定的約定和方法。這些約定之一是測試應該分成自己的測試文件,並且必須以「_test.go」後綴結尾。

可以從非測試檔案呼叫測試函數嗎?

簡短回答:不。

與您的問題相反,測試函數不能直接從非測試 Go 檔案呼叫。這種分離確保了測試與被測程式碼保持不同且獨立。

Go 中的測試模式

Go 主要採用兩種類型的單元測試:

  • 黑盒測試:評估公共、匯出函數,模仿外部呼叫者如何與它們互動。
  • 白盒測試:評估私有函數,同一包中未導出的函數,提供對內部操作的更深入的了解。

範例

考慮以下帶有匯出的「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):

白盒測試(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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn