Bagaimana untuk mengejek fungsi dalam ujian unit Golang?

PHPz
Lepaskan: 2024-06-05 21:19:59
asal
1025 orang telah melayarinya

Terdapat cara berikut untuk mengejek fungsi dalam ujian unit Golang: Gunakan pakej olok-olok: Gunakan kaedah gomock.Mock untuk mencipta fungsi olok-olok, dan gunakan EXPECT dan RETURN untuk menetapkan nilai pulangan dan tingkah lakunya. Menggunakan ujian.T: Gunakan kaedah Helper, Run, dan Parallel dalam struktur pengujian.T untuk mengejek fungsi. Gunakan fungsi tanpa nama: Gunakan fungsi tanpa nama untuk mensimulasikan fungsi dengan cepat, terutamanya apabila ia hanya perlu dipanggil sekali.

如何在 Golang 单元测试中模拟函数?

Bagaimana untuk mengejek fungsi dalam ujian unit Golang?

Dalam ujian unit, fungsi mengejek ialah teknik yang berkuasa untuk menggantikan fungsi sebenar semasa menguji kod anda. Ia membolehkan anda mengesahkan ketepatan fungsi tanpa bergantung pada faktor luaran. Golang menyediakan pelbagai cara untuk mensimulasikan fungsi, dan artikel ini akan memperkenalkan beberapa teknik yang paling biasa.

Gunakan pakej mock mock

mock 包是模拟函数的推荐方式。它提供了一个简单的接口,允许您创建和验证函数调用的模拟。

package main

import (
    "fmt"

    "github.com/golang/mock/gomock"
)

type Fooer interface {
    Foo() string
}

func main() {
    ctrl := gomock.NewController(nil)
    defer ctrl.Finish()

    mockFooer := mock_Fooer(ctrl)

    // 设置模拟的返回值
    mockFooer.EXPECT().Foo().Return("Hello, world!")

    // 调用模拟函数
    fmt.Println(mockFooer.Foo())
}
Salin selepas log masuk

使用 testing.T

testing.T 结构提供了一些用于模拟函数的方法,包括 HelperRunParallel

Pakej mock ialah cara yang disyorkan untuk mensimulasikan fungsi. Ia menyediakan antara muka mudah yang membolehkan anda membuat dan mengesahkan olok-olok panggilan fungsi.

package main

import (
    "fmt"
    "testing"
)

type Fooer interface {
    Foo() string
}

func TestFoo(t *testing.T) {
    t.Helper()

    // 设置模拟的返回值
    foo := func() string { return "Hello, world!" }

    // 调用模拟函数
    fmt.Println(foo())
}
Salin selepas log masuk

Gunakan testing.T

Struktur testing.T menyediakan beberapa kaedah untuk mensimulasikan fungsi, termasuk Helper, Run< kaedah /code> dan <code>Parallel.

package main

import (
    "fmt"
)

func main() {
    // 定义模拟函数
    foo := func() string { return "Hello, world!" }

    // 调用模拟函数
    fmt.Println(foo())
}
Salin selepas log masuk

Menggunakan Fungsi Tanpa Nama

Fungsi tanpa nama ialah cara pantas untuk mensimulasikan fungsi, terutamanya apabila anda hanya perlu melakukan satu panggilan. 🎜
package main

import (
    "context"
    "fmt"
    "testing"

    "github.com/golang/mock/gomock"
)

type UserStore interface {
    Get(ctx context.Context, id int) (*User, error)
}

type User struct {
    Name string
}

func TestGetUser(t *testing.T) {
    ctrl := gomock.NewController(t)
    defer ctrl.Finish()

    mockUserStore := mock_UserStore(ctrl)

    // 设置模拟的返回值
    mockUserStore.EXPECT().Get(gomock.Any(), 1).Return(&User{Name: "John Doe"}, nil)

    // 实例化待测函数
    userService := UserService{
        userStore: mockUserStore,
    }

    // 调用待测函数
    user, err := userService.GetUser(context.Background(), 1)
    if err != nil {
        t.Fatalf("GetUser() failed: %v", err)
    }

    // 验证函数的行为
    if user.Name != "John Doe" {
        t.Errorf("GetUser() returned unexpected user name: %s", user.Name)
    }
}
Salin selepas log masuk
🎜Kes praktikal🎜🎜Berikut ialah kes praktikal menggunakan pakej olok-olok untuk mensimulasikan fungsi dalam ujian unit:🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk mengejek fungsi dalam ujian unit Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!