Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Organisasi dan penyelenggaraan kod ujian di Golang

Organisasi dan penyelenggaraan kod ujian di Golang

王林
王林asal
2023-08-07 23:04:431094semak imbas

Organisasi dan penyelenggaraan kod ujian di Golang

Uji organisasi dan penyelenggaraan kod di Golang

Pengenalan:
Apabila menggunakan Golang untuk pembangunan perisian, ujian berkualiti tinggi adalah salah satu faktor penting untuk memastikan kestabilan dan kebolehpercayaan perisian. Untuk mengatur dan mengekalkan kod ujian dengan berkesan, dalam artikel ini, kami akan membincangkan beberapa amalan terbaik untuk mengatur dan mengurus kod ujian di Golang dan menyediakan beberapa kod sampel.

1. Organisasi fail ujian
Di Golang, kod ujian diletakkan dalam fail _test.go di bawah pakej yang sama dengan kod yang sedang diuji. Fail ujian ini boleh diletakkan dalam folder yang dipanggil "ujian". Sebagai contoh, dengan mengandaikan kita mempunyai pakej yang dipanggil "utils" yang mengandungi beberapa fungsi utiliti, kita boleh mencipta folder yang dipanggil "test" dalam direktori akar pakej "utils" dan mencipta _test dalam folder tersebut .go file.

Contoh struktur:

utils/
|- utils.go
|- test/
   |- utils_test.go

2. Pengasingan ujian unit dan ujian integrasi
Apabila menulis kod ujian, kita boleh membahagikannya kepada ujian unit dan ujian integrasi. Ujian unit ialah ujian fungsi atau kaedah tunggal, manakala ujian integrasi ialah ujian interaksi antara pelbagai fungsi atau komponen.

Biasanya, kita boleh menggunakan fungsi t.Run() dalam fail _test.go untuk membahagikan kes ujian atau kumpulan ujian yang berbeza. Ini boleh menjadikan kod ujian kami lebih mudah dibaca dan diselenggara.

Kod sampel:

func TestAdd(t *testing.T) {
    t.Run("Add two positive numbers", func(t *testing.T) {
        result := utils.Add(2, 3)
        if result != 5 {
            t.Errorf("Expected 5, but got %d", result)
        }
    })

    t.Run("Add a positive and a negative number", func(t *testing.T) {
        result := utils.Add(2, -3)
        if result != -1 {
            t.Errorf("Expected -1, but got %d", result)
        }
    })
}

3. Liputan ujian
Liputan ujian merujuk kepada tahap liputan kod yang diuji oleh kod ujian. Ia boleh membantu kami menilai kualiti kod ujian. Di Golang, kita boleh menggunakan arahan go test untuk melihat liputan ujian.

Untuk mengira liputan ujian, kita boleh menggunakan beberapa fungsi pakej "testing/cover" dalam kod ujian dan jalankan arahan "go test -cover".

Contoh kod:

func TestAdd(t *testing.T) {
    // 测试代码...

    // 计算测试覆盖率
    cover := testing.Coverage()

    // 输出测试覆盖率结果
    t.Logf("Coverage: %.2f%%", cover*100)
}

4. Uji fungsi tambahan
Kadangkala kita mungkin perlu menulis beberapa fungsi tambahan untuk membantu menulis dan mengekalkan kod ujian. Fungsi pembantu ini boleh ditakrifkan dalam fail _test.go dan dipanggil jika perlu.

Kod sampel:

func TestAdd(t *testing.T) {
    // 辅助函数
    assertEqual := func(a, b int) {
        if a != b {
            t.Errorf("Expected %d, but got %d", b, a)
        }
    }

    // 测试用例
    t.Run("Add two positive numbers", func(t *testing.T) {
        result := utils.Add(2, 3)
        assertEqual(result, 5)
    })

    t.Run("Add a positive and a negative number", func(t *testing.T) {
        result := utils.Add(2, -3)
        assertEqual(result, -1)
    })
}

5. Mock and Stub
Semasa proses ujian, kadangkala kita perlu mensimulasikan beberapa kebergantungan atau mengasingkan beberapa perkhidmatan luaran. Golang menyediakan beberapa perpustakaan, seperti gomockhttptest, yang boleh membantu kami dengan simulasi dan pengasingan.

Contoh kod:

type DB interface {
    Get(key string) (string, error)
}

type MockDB struct {
    mock.Mock
}

func (m *MockDB) Get(key string) (string, error) {
    args := m.Called(key)
    return args.String(0), args.Error(1)
}

func TestGetUser(t *testing.T) {
    mockDB := new(MockDB)
    mockDB.On("Get", "id").Return("user", nil)

    user, err := GetUser("id", mockDB)
    if err != nil {
        t.Errorf("Expected no error, but got %v", err)
    }

    if user != "user" {
        t.Errorf("Expected 'user', but got '%s'", user)
    }
}

Kesimpulan:
Mengatur dan mengekalkan kod ujian di Golang adalah bahagian penting dalam memastikan kualiti perisian. Dengan mengikuti amalan terbaik di atas dan menggunakan teknik dalam kod sampel, kami boleh mengatur dan mengekalkan kod ujian kami dengan lebih baik, sekali gus meningkatkan kualiti dan kebolehpercayaan perisian kami. Penyepaduan berterusan dan menjalankan ujian dengan kerap adalah satu lagi amalan penting untuk memastikan konsistensi dan kualiti tinggi kod yang diuji dan kod diuji.

Bacaan berkaitan:

  • [The Go Blog: Table Driven Tests](https://blog.golang.org/subtests)
  • [The Go Blog: Liputan Kod](https://blog.golang.org /cover)
  • [The Go Blog: Advanced Go Concurrency Patterns](https://blog.golang.org/advanced-go-concurrency-patterns)
  • [The Go Blog: HTTP/2 Server Push](https: //blog.golang.org/http2-push)

Atas ialah kandungan terperinci Organisasi dan penyelenggaraan kod ujian di Golang. 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