Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Anda Memanggil Fungsi Ujian Go Daripada Fail Bukan Ujian?

Bolehkah Anda Memanggil Fungsi Ujian Go Daripada Fail Bukan Ujian?

DDD
DDDasal
2024-10-25 15:55:02118semak imbas

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

Memanggil Fungsi Ujian daripada Fail Bukan Ujian

Dalam Go, ujian bergantung pada konvensyen dan metodologi tertentu. Salah satu konvensyen ini ialah ujian harus dipisahkan ke dalam fail ujian mereka sendiri, yang mesti berakhir dengan akhiran "_test.go".

Bolehkah Fungsi Ujian Dipanggil daripada Fail Bukan Ujian?

Jawapan ringkas: Tidak.

Bertentangan dengan soalan anda, fungsi ujian tidak boleh digunakan terus daripada fail Go bukan ujian. Pemisahan ini memastikan ujian kekal berbeza dan bebas daripada kod yang sedang diuji.

Corak Pengujian dalam Go

Go terutamanya menggunakan dua jenis ujian unit:

  • Ujian kotak hitam: Menilai fungsi awam, dieksport, meniru cara pemanggil luar akan berinteraksi dengan mereka.
  • Ujian kotak putih: Menilai peribadi , fungsi yang tidak dieksport dalam pakej yang sama, memberikan pandangan yang lebih mendalam tentang operasi dalaman.

Contoh

Pertimbangkan pakej "contoh" berikut dengan "Jumlah" yang dieksport fungsi dan fungsi "tambah" yang tidak dieksport:

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
}

Ujian kotak hitam (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()
        }
    }
}

Ujian kotak putih (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()
        }
    }
}

Kesimpulannya, memanggil fungsi ujian daripada fail bukan ujian melanggar prinsip ujian Go. Pakej ujian yang berasingan harus digunakan untuk tujuan ujian unit, mematuhi aliran kerja dan konvensyen yang ditetapkan.

Atas ialah kandungan terperinci Bolehkah Anda Memanggil Fungsi Ujian Go Daripada Fail Bukan Ujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn