Lua Academy · Pelajaran

Mock dan Spy

Asingkan kod yang sedang diuji.

Pelajaran 4 daripada 413 langkah

Mock dan Spy ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Pengganti Ujian

Kadang-kadang sesuatu fungsi bergantung pada perkara yang lambat atau luaran, seperti panggilan rangkaian atau pencatat log. Pengganti ujian menggantikan kebergantungan tersebut dengan pengganti yang boleh dikawal.

busted menyediakan tiga jenis: spy, stub dan mock. Setiap satunya memenuhi keperluan yang berbeza.

Peranan spy

Spy membungkus sesuatu fungsi dan merekodkan cara fungsi itu dipanggil sambil terus menjalankan fungsi asal. Ini membolehkan anda mengesahkan bahawa sesuatu telah dipanggil.

Cipta spy dengan menggunakan spy.new pada sesuatu fungsi, atau pantau medan dalam jadual.

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

Memantau Kaedah dengan spy

Gunakan spy.on untuk memantau kaedah pada jadual sedia ada. Fungsi asal masih dijalankan, tetapi busted menjejaki setiap panggilan.

Ini sesuai untuk mengesahkan kesan sampingan, seperti pencatat log dipanggil.

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

Menyemak Bilangan Panggilan

Spy merekodkan berapa kali ia dipanggil. Gunakan was.called(n) untuk menegaskan bilangan yang tepat.

Ini dapat mengesan pepijat apabila sesuatu fungsi dijalankan terlalu kerap atau langsung tidak dijalankan.

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

Menyemak Argumen Panggilan

Anda boleh menegaskan argumen yang diterima oleh spy menggunakan was.called_with. busted membandingkan argumen yang direkodkan dengan jangkaan anda.

Ini mengesahkan bukan sahaja bahawa fungsi dijalankan, tetapi juga bahawa fungsi itu dijalankan dengan betul.

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

Peranan stub

Stub menggantikan sesuatu fungsi sepenuhnya supaya fungsi asal tidak pernah dijalankan. Gunakannya untuk melangkau kerja yang lambat atau tidak diingini, seperti capaian rangkaian atau cakera sebenar.

Cipta stub menggunakan stub pada medan jadual. Secara lalai, stub tidak melakukan apa-apa dan mengembalikan nil.

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

Nilai Pulangan stub

Anda boleh membuat stub mengembalikan nilai tetap dengan returns. Ini menyalurkan data terkawal kepada kod yang diuji.

Dengan itu, ujian anda langsung tidak bergantung pada kebergantungan sebenar.

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

Peranan mock

Mock mengambil jadual sedia ada dan menukar semua fungsinya menjadi spy atau stub sekali gus. Ini ialah cara mudah untuk menjejaki keseluruhan objek.

Panggil mock(obj) untuk membungkusnya, kemudian buat penegasan pada setiap kaedah.

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

mock dengan Kaedah stub

Menghantar true sebagai argumen kedua kepada mock akan menggantikan setiap kaedah dengan stub, jadi tiada fungsi asal yang dijalankan. Ini mengasingkan objek sepenuhnya.

Gunakan cara ini apabila kaedah sebenar mempunyai kesan sampingan yang perlu anda elakkan.

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

Memulihkan Pengganti

Spy, stub dan mock mengubah jadual yang dikongsi, jadi anda mesti memulihkannya; jika tidak, ujian seterusnya akan melihat pengganti tersebut. Panggil :revert() atau mock.revert.

Letakkan pemulihan dalam after_each untuk menjamin keadaan yang bersih antara ujian.

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

Memilih Pengganti yang Tepat

Gunakan spy untuk memerhati fungsi sebenar, stub untuk menggantikannya dengan tingkah laku terkawal, dan mock untuk membungkus keseluruhan objek sekali gus.

Utamakan pengganti paling ringkas yang dapat melaksanakan tugas tersebut. Penggunaan mock secara berlebihan boleh menjadikan ujian rapuh dan menyembunyikan pepijat sebenar.

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)

Semakan Pantas

Uji kefahaman anda tentang pengganti ujian busted.

Imbas Kembali

Pengganti ujian mengasingkan kod daripada kebergantungan yang lambat atau luaran. spy merekodkan panggilan sambil menjalankan fungsi asal, stub menggantikan fungsi dengan tingkah laku terkawal, dan mock membungkus keseluruhan objek.

Buat penegasan dengan was.called dan was.called_with, dan sentiasa pulihkan pengganti dengan revert dalam after_each untuk memastikan ujian kekal terasing.

Percuma untuk bermula

Pelajari Lua dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Mock dan Spy” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Mock dan Spy”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mock dan Spy”?

Asingkan kod yang sedang diuji. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Mock dan Spy” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengapa Menguji
  2. Blok describe dan it
  3. Penegasan
  4. Mock dan Spy
← Kembali ke Lua Academy