Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan rangka kerja mengejek untuk ujian unit di Golang?

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

WBOY
WBOYasal
2024-06-05 11:50:32973semak imbas

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

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()
    }
  • *使用 gomock.MockRecorder 生成 Mock 对象:

    mockUserRepo := gomock.NewMockUserRepository(ctrl)

设置 Mock 行为

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

    mockUserRepo.EXPECT().GetUser(1).Return(user, nil)

实战案例

考虑一个 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")
    }
}

验证 Mock

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

    defer ctrl.Finish()

* 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!

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