0Pricing
Lua Academy · Pelajaran

Mock dan Spy

Pisahkan kode yang sedang diuji.

Mock dan Spy adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Objek Pengganti Pengujian

Terkadang sebuah fungsi bergantung pada sesuatu yang lambat atau eksternal, seperti panggilan jaringan atau pencatat log. Objek pengganti pengujian menggantikan dependensi tersebut dengan pengganti yang dapat dikendalikan.

busted menyediakan tiga jenis: spy, stub, dan mock. Masing-masing memiliki kegunaan yang berbeda.

Cara Kerja Spy

Spy membungkus sebuah fungsi dan mencatat cara fungsi itu dipanggil, tetapi tetap menjalankan fungsi aslinya. Dengan begitu, Anda dapat memverifikasi bahwa sesuatu benar-benar dipanggil.

Buat spy dengan spy.new di sekitar sebuah fungsi, atau pantau bidang pada tabel.

local s = spy.new(function() end)
s(1, 2)
assert.spy(s).was.called()

Memantau Metode dengan Spy

Gunakan spy.on untuk memantau metode pada tabel yang sudah ada. Fungsi asli tetap dijalankan, tetapi busted melacak setiap pemanggilan.

Ini ideal untuk memastikan efek samping, misalnya pencatat log dipanggil.

spy.on(logger, "info")
service.run()
assert.spy(logger.info).was.called()

Memeriksa Jumlah Pemanggilan

Spy mencatat berapa kali dirinya dipanggil. Gunakan was.called(n) untuk memastikan jumlah yang persis.

Ini menemukan bug ketika sebuah fungsi terpanggil terlalu sering atau tidak terpanggil sama sekali.

assert.spy(s).was.called(2)
assert.spy(s).was_not.called()

Memeriksa Argumen Pemanggilan

Anda dapat memastikan argumen yang diterima spy menggunakan was.called_with. busted membandingkan argumen yang tercatat dengan ekspektasi Anda.

Ini memastikan bukan hanya bahwa fungsi berjalan, tetapi juga bahwa fungsi berjalan dengan benar.

local s = spy.new(function() end)
s("user", 42)
assert.spy(s).was.called_with("user", 42)

Cara Kerja Stub

Stub sepenuhnya menggantikan sebuah fungsi sehingga fungsi asli tidak pernah dijalankan. Gunakan stub untuk melewati pekerjaan yang lambat atau tidak diinginkan, seperti akses jaringan atau penyimpanan disk yang sebenarnya.

Buat stub dengan stub pada bidang tabel. Secara bawaan, stub tidak melakukan apa pun dan mengembalikan nil.

stub(api, "fetch")
service.load()
assert.stub(api.fetch).was.called()

Nilai Kembalian Stub

Anda dapat membuat stub mengembalikan nilai tetap dengan returns. Ini memasukkan data yang terkendali ke dalam kode yang diuji.

Sekarang pengujian Anda sama sekali tidak bergantung pada dependensi sebenarnya.

stub(api, "fetch").returns({id = 1})
local r = service.load()
assert.are.same({id = 1}, r)

Cara Kerja Mock

Mock mengambil tabel yang sudah ada dan mengubah semua fungsinya menjadi spy atau stub sekaligus. Ini adalah cara praktis untuk melacak seluruh objek.

Panggil mock(obj) untuk membungkusnya, lalu buat asersi terhadap metode-metode individual.

local m = mock(realLogger)
app.start(m)
assert.spy(m.warn).was.called()

Mock dengan Metode Stub

Memberikan true sebagai argumen kedua kepada mock membuat stub untuk setiap metode, sehingga tidak ada fungsi asli yang dijalankan. Dengan demikian, objek sepenuhnya terisolasi.

Gunakan cara ini ketika metode sebenarnya memiliki efek samping yang harus Anda hindari.

local db = mock(database, true)
db.query.returns({})
assert.are.same({}, repo.all())

Memulihkan Objek Pengganti

Spy, stub, dan mock mengubah tabel bersama, jadi Anda harus memulihkannya agar pengujian berikutnya tidak melihat objek pengganti tersebut. Panggil :revert() atau mock.revert.

Letakkan pemulihan di dalam after_each untuk menjamin keadaan tetap bersih di antara pengujian.

after_each(function()
  mock.revert(m)
end)

Memilih Objek Pengganti yang Tepat

Gunakan spy untuk mengamati fungsi nyata, stub untuk menggantinya dengan perilaku yang terkendali, dan mock untuk membungkus seluruh objek sekaligus.

Utamakan objek pengganti paling sederhana yang dapat menyelesaikan tugasnya. Penggunaan mock secara berlebihan dapat membuat pengujian rapuh dan menyembunyikan bug nyata.

describe("mailer", function()
  it("sends once", function()
    local s = spy.on(smtp, "send")
    mailer.notify("a@b.com")
    assert.spy(s).was.called(1)
  end)
end)

Pemeriksaan Singkat

Uji pemahaman Anda tentang objek pengganti pengujian busted.

Ringkasan

Objek pengganti pengujian mengisolasi kode dari dependensi yang lambat atau eksternal. Spy mencatat pemanggilan sambil menjalankan fungsi asli, stub mengganti fungsi dengan perilaku yang terkendali, dan mock membungkus seluruh objek.

Buat asersi dengan was.called dan was.called_with, lalu selalu pulihkan objek pengganti dengan revert di dalam after_each agar pengujian tetap terisolasi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mock dan Spy” gratis?

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

Apa yang akan aku pelajari di “Mock dan Spy”?

Pisahkan kode yang sedang diuji. Kamu berlatih Lua 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 Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua 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 4 dari 4.

Berapa lama pelajaran “Mock dan Spy” 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 Lua Academy ini?

Ya. Setiap pelajaran Lua 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. Mengapa Melakukan Pengujian
  2. Blok describe dan it
  3. Asersi
  4. Mock dan Spy
← Kembali ke Lua Academy