Bagaimana untuk menggunakan rangka kerja mengejek untuk ujian unit di Golang?

WBOY
Lepaskan: 2024-06-05 11:50:32
asal
972 orang telah melayarinya

Menggunakan rangka kerja Mocking untuk ujian unit dalam Go boleh menumpukan pada menguji komponen individu dengan mengasingkan kebergantungan, meningkatkan kebolehpercayaan dan kemudahan penyelenggaraan. Langkah termasuk: Memasang rangka kerja mengejek pihak ketiga seperti Gomock atau Mockery. Cipta objek Mock dan tentukan tingkah laku kaedah antara muka. Tetapkan tingkah laku Olok-olok dan gunakan EXPECT untuk merekodkan panggilan jangkaan Olok-olok. Gunakan objek Mock untuk menulis ujian unit untuk mengesahkan kelakuan fungsi. Gunakan ctrl.Finish() pada akhir ujian untuk mengesahkan bahawa jangkaan Mock dipenuhi.

如何在 Golang 中使用 mocking 框架进行单元测试?

Cara menggunakan rangka kerja Mocking untuk ujian unit di Golang

Pengenalan

Ujian unit adalah amalan penting untuk memastikan kod berfungsi seperti yang diharapkan. Dalam Go, objek olok-olok membenarkan pembangun mengasingkan kebergantungan untuk menumpukan pada menguji komponen individu.

Memasang dependencies

  • Biasanya menggunakan rangka kerja mengejek pihak ketiga seperti Gomock atau Mockery.
  • Untuk Gomock, gunakan arahan berikut:

    go get github.com/golang/mock/gomock
    Salin selepas log masuk

Buat objek Olok-olok

  • Objek olok-olok membenarkan mentakrifkan kelakuan kaedah antara muka.
  • Gunakan gomock.NewController untuk mencipta Pengawal: gomock.NewController 创建一个 Controller:

    func TestUserService(t *testing.T) {
      ctrl := gomock.NewController(t)
      defer ctrl.Finish()
    }
    Salin selepas log masuk
  • *使用 gomock.MockRecorder 生成 Mock 对象:

    mockUserRepo := gomock.NewMockUserRepository(ctrl)
    Salin selepas log masuk

设置 Mock 行为

  • 使用 EXPECT 录制 Mock 期望调用:

    mockUserRepo.EXPECT().GetUser(1).Return(user, nil)
    Salin selepas log masuk

实战案例

考虑一个 UserService,它依赖于UserRepository。我们编写一个单元测试来确保 GetUser 返回正确的用户:

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

    mockUserRepo.EXPECT().GetUser(1).Return(user, nil)
    foundUser, err := userService.GetUser(1)

    if err != nil {
        t.Errorf("GetUser() failed: %v", err)
    }
    if foundUser != user {
        t.Errorf("GetUser() returned incorrect user")
    }
}
Salin selepas log masuk

验证 Mock

  • 在测试结束时使用 ctrl.Finish()

    defer ctrl.Finish()
    Salin selepas log masuk
* Gunakan gomock.MockRecorder untuk menjana objek Mock:

rrreee

  • tingkah laku
  • Gunakan JANGKA untuk merekodkan panggilan jangkaan Olok-olok:
  • rrreee
  • Kes praktikal
🎜🎜Pertimbangkan Perkhidmatan Pengguna, yang bergantung pada UserRepository. Kami menulis ujian unit untuk memastikan GetUser mengembalikan pengguna yang betul: 🎜rrreee🎜🎜Sahkan Mock🎜🎜🎜🎜🎜Gunakan ctrl.Finish() pada akhir ujian untuk mengesahkan bahawa jangkaan Mock adalah bertemu: 🎜rrreee🎜 🎜🎜🎜 Kelebihan 🎜🎜🎜🎜🎜Asingkan kebergantungan: 🎜Olok-olok mengasingkan kebergantungan dalam kod ujian, membenarkan fokus pada satu komponen. 🎜🎜🎜Tingkatkan kebolehpercayaan: 🎜Tingkatkan kebolehpercayaan ujian dengan mentakrif dan mengesahkan tingkah laku Olok-olok dengan ketat. 🎜🎜🎜Mudah diselenggara: 🎜Objek olok-olok mudah diselenggara dan dikemas kini, mencerminkan perubahan dalam logik perniagaan. 🎜🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan rangka kerja mengejek untuk ujian unit di 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!