0Pricing
Go Academy · Pelajaran

Pengganti Pengujian: Mock dan Stub

Interface untuk kemudahan pengujian dan injeksi dependensi

Pengganti Pengujian: Mock dan Stub adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Ikhtisar objek pengganti pengujian

Objek pengganti pengujian menggantikan dependensi nyata dalam pengujian. Jenisnya: pengganti tetap (mengembalikan respons yang telah ditentukan), tiruan (memverifikasi interaksi), pencatat (mencatat pemanggilan), palsu (implementasi yang berfungsi di memori).

Antarmuka memungkinkan objek pengganti pengujian

Rancang fungsi agar menerima antarmuka, bukan tipe konkret. Dalam produksi, masukkan implementasi nyata; dalam pengujian, masukkan objek pengganti pengujian.

type UserStore interface {
    FindByID(id int) (*User, error)
}

func GetUser(store UserStore, id int) (*User, error) {
    return store.FindByID(id)
}

Pengganti tetap manual

Pengganti tetap adalah struktur sederhana yang mengimplementasikan antarmuka dan mengembalikan nilai yang telah dikonfigurasi sebelumnya:

type stubStore struct{ user *User; err error }
func (s *stubStore) FindByID(_ int) (*User, error) { return s.user, s.err }

// In test:
store := &stubStore{user: &User{Name: "Alice"}}
result, _ := GetUser(store, 1)

Tiruan manual

Tiruan mencatat pemanggilan dan memverifikasinya:

type mockStore struct {
    called bool
    gotID  int
    user   *User
}
func (m *mockStore) FindByID(id int) (*User, error) {
    m.called = true; m.gotID = id
    return m.user, nil
}
// Assert: if !mock.called { t.Error(...) }

testify/mock

Paket testify/mock menghasilkan atau menuliskan objek tiruan dengan ekspektasi pemanggilan dan konfigurasi nilai pengembalian:

type MockStore struct { mock.Mock }
func (m *MockStore) FindByID(id int) (*User, error) {
    args := m.Called(id)
    return args.Get(0).(*User), args.Error(1)
}
// In test:
m := new(MockStore)
m.On("FindByID", 1).Return(&User{}, nil)
m.AssertExpectations(t)

gomock

go.uber.org/mock/gomock (sebelumnya golang/mock) menghasilkan tiruan dari antarmuka. Gunakan CLI mockgen untuk membuatnya; gunakan EXPECT() untuk menetapkan ekspektasi.

Palsu

Implementasi palsu adalah implementasi yang berfungsi di memori. Misalnya, penyimpanan pengguna dalam memori yang menyimpan pengguna di sebuah peta. Implementasi palsu lebih berat untuk ditulis, tetapi lebih realistis dan tidak serapuh tiruan.

type fakeStore struct{ users map[int]*User }
func (f *fakeStore) FindByID(id int) (*User, error) {
    u, ok := f.users[id]
    if !ok { return nil, ErrNotFound }
    return u, nil
}

httptest untuk klien HTTP

net/http/httptest menyediakan server dan pencatat pengujian HTTP dalam proses—objek palsu standar untuk dependensi berbasis HTTP.

ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    json.NewEncoder(w).Encode(User{Name: "Alice"})
}))
defer ts.Close()

Kapan menggunakan setiap objek pengganti

Pengganti tetap: respons tetap sederhana. Tiruan: memverifikasi jumlah pemanggilan atau argumen. Palsu: perilaku kompleks. Hindari terlalu banyak tiruan—implementasi palsu dan komponen nyata dalam pengujian integrasi lebih andal.

Menghindari pengujian rapuh

Tiruan yang menegaskan urutan pemanggilan atau nilai argumen secara persis menjadi rapuh ketika implementasi berkembang. Jika memungkinkan, pilih pengganti tetap dengan penegasan keluaran atau implementasi palsu.

Menemukan antarmuka

Ekstrak antarmuka setelah mengidentifikasi permukaan tipe konkret yang digunakan oleh pemanggil (ISP). Go mendukung pemenuhan antarmuka secara implisit—tidak diperlukan modifikasi pada tipe konkret.

Pemeriksaan Singkat

Apa perbedaan utama antara pengganti tetap dan tiruan?

Ringkasan: Objek Pengganti Pengujian

Poin penting:

  • Rancang berdasarkan antarmuka agar objek pengganti pengujian dapat digunakan
  • Pengganti tetap: mengembalikan data yang telah ditentukan; Tiruan: memverifikasi interaksi
  • httptest untuk HTTP; implementasi palsu dalam memori untuk penyimpanan
  • Hindari terlalu banyak tiruan—pilih implementasi palsu untuk perilaku kompleks

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengganti Pengujian: Mock dan Stub” gratis?

Ya — teks lengkap “Pengganti Pengujian: Mock dan Stub” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengganti Pengujian: Mock dan Stub”?

Interface untuk kemudahan pengujian dan injeksi dependensi Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pengganti Pengujian: Mock dan Stub” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menulis Pengujian Unit dengan testing
  2. Pengujian Berbasis Tabel
  3. Pengganti Pengujian: Mock dan Stub
  4. Cakupan Pengujian dan testify
← Kembali ke Go Academy