Ralat mengendalikan strategi dalam ujian fungsi Golang

WBOY
Lepaskan: 2024-04-16 16:54:01
asal
691 orang telah melayarinya

Strategi pengendalian ralat dalam ujian fungsi Go termasuk: menggunakan pakej ralat terbina dalam untuk mencipta dan mengurus ralat. Sesuaikan jenis ralat untuk memberikan maklumat ralat yang lebih khusus. Semak keadaan ralat dengan ringkas menggunakan penegasan tegas. Gunakan Fatal dan Skip untuk menamatkan atau melangkau ujian pada ralat kritikal.

Golang 函数测试中的错误处理策略

Strategi Pengendalian Ralat dalam Ujian Fungsi Go

Dalam ujian fungsi Go, pengendalian ralat dengan betul adalah penting untuk memastikan kebolehpercayaan dan keteguhan ujian. Berikut ialah beberapa strategi praktikal:

1 Gunakan pakej error terbina dalam errors

Go 的标准库提供了 errors 包,它提供了创建和管理错误的机制。错误值可以实现 error 接口,使我们能够轻松地使用 if 条件来处理错误。

import (
    "fmt"
    "errors"
)

func Divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func TestDivide(t *testing.T) {
    result, err := Divide(10, 2)
    if err != nil {
        t.Error(err)
    }
    fmt.Println(result) // 输出:5
}
Salin selepas log masuk

2. 自定义错误类型

有时,使用自定义错误类型比使用内置错误更合适。这样可以提供更具体和有意义的错误信息。

type MyError struct {
    Message string
}

func (e MyError) Error() string {
    return e.Message
}

func SomeFunction() error {
    return MyError{Message: "an error occurred"}
}

func TestSomeFunction(t *testing.T) {
    err := SomeFunction()
    if err != nil {
        t.Errorf("an error occurred: %v", err)
    }
}
Salin selepas log masuk

3. 使用 assert 断言

Go 的 testing 包提供了 assert 断言,可以帮助我们检查错误条件。它们提供了一种简洁的方式来编写错误检查代码。

import "testing"

func TestDivide(t *testing.T) {
    result, err := Divide(10, 2)
    if err := assert.NoError(err); err != nil {
        t.Error(err)
    }
    fmt.Println(result) // 输出:5
}
Salin selepas log masuk

4. 使用 FatalSkip

在某些情况下,当遇到严重错误时,我们可能需要终止测试。testing 包提供了 FatalSkip 函数来实现此目的。

func TestDivide(t *testing.T) {
    result, err := Divide(10, 0)
    if err != nil {
        t.Fatal(err)
    }
    fmt.Println(result) // 输出:0 (不会执行)
}
Salin selepas log masuk

实战案例

让我们考虑一个需要处理错误的函数测试的示例:

import (
    "testing"
    "errors"
)

func MyFunction(input string) (string, error) {
    if input == "" {
        return "", errors.New("input cannot be empty")
    }
    return input + " processed", nil
}

func TestMyFunction(t *testing.T) {
    testCases := []struct {
        input    string
        expected string
        err      error
    }{
        {input: "abc", expected: "abc processed", err: nil},
        {input: "", expected: "", err: errors.New("input cannot be empty")},
    }

    for _, tc := range testCases {
        result, err := MyFunction(tc.input)
        if !errors.Is(err, tc.err) {
            t.Errorf("expected error %v, got %v", tc.err, err)
        }
        if result != tc.expected {
            t.Errorf("expected %v, got %v", tc.expected, result)
        }
    }
}
Salin selepas log masuk

在这个例子中,我们使用 testCases 表驱动测试来覆盖不同的输入场景。我们使用 errors.Is 来比较实际错误与预期的错误。同样,我们使用 if

🎜Pustaka standard Go menyediakan pakej errors, yang menyediakan penciptaan dan pengurusan ralat. Mekanisme. Nilai ralat boleh melaksanakan antara muka error, membolehkan kami menggunakan syarat if dengan mudah untuk mengendalikan ralat. 🎜rrreee🎜🎜2. Jenis ralat tersuai🎜🎜🎜 Kadangkala, lebih sesuai untuk menggunakan jenis ralat tersuai dan bukannya ralat terbina dalam. Ini memberikan maklumat ralat yang lebih spesifik dan bermakna. 🎜rrreee🎜🎜3. Gunakan pernyataan assert🎜🎜🎜Pakej testing Go menyediakan pernyataan assert yang boleh membantu kami menyemak keadaan ralat. Mereka menyediakan cara ringkas untuk menulis kod semakan ralat. 🎜rrreee🎜🎜4 Gunakan Fatal dan Skip🎜🎜🎜Dalam sesetengah kes, kami mungkin perlu menamatkan ujian apabila ralat yang serius ditemui. Pakej testing menyediakan fungsi Fatal dan Skip untuk tujuan ini. 🎜rrreee🎜🎜Kes Praktikal🎜🎜🎜Mari kita pertimbangkan contoh ujian fungsi yang perlu menangani ralat: 🎜rrreee🎜Dalam contoh ini, kami menggunakan testCases ujian dipacu jadual untuk merangkumi senario input yang berbeza. Kami menggunakan errors.Is untuk membandingkan ralat sebenar dengan ralat yang dijangkakan. Sekali lagi, kami menggunakan syarat if untuk mengendalikan ralat dan memastikan keputusan adalah seperti yang diharapkan. 🎜

Atas ialah kandungan terperinci Ralat mengendalikan strategi dalam ujian fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan