Lua Academy · Ders

Sahte Nesneler ve Casuslar

Test edilen kodu yalıtın.

4. ders / 413 adım

Sahte Nesneler ve Casuslar, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

Sınama İkameleri

Bazen bir işlev, ağ çağrısı veya günlükleyici gibi yavaş ya da dış bir şeye bağlıdır. Sınama ikameleri, bu bağımlılıkları denetlenebilir yedeklerle değiştirir.

busted üç tür sağlar: casuslar, yer tutucular ve taklitler. Her biri farklı bir ihtiyaca hizmet eder.

Casus Ne Yapar

Bir casus, bir işlevi sarar ve asıl işlevi çalıştırmaya devam ederken nasıl çağrıldığını kaydeder. Böylece bir şeyin çağrıldığını doğrulayabilirsiniz.

Bir işlevin çevresinde spy.new kullanarak veya bir tablonun alanını izleyerek casus oluşturun.

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

Bir Yöntemi İzleme

Var olan bir tablodaki bir yöntemi izlemek için spy.on kullanın. Asıl yöntem çalışmaya devam eder, ancak busted her çağrıyı izler.

Bu, bir günlükleyicinin çağrılması gibi bir yan etkinin gerçekleştiğini doğrulamak için idealdir.

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

Çağrı Sayılarını Denetleme

Casuslar kaç kez çağrıldıklarını kaydeder. Tam sayıyı doğrulamak için was.called(n) kullanın.

Bu, bir işlevin çok sık veya hiç çalışmaması gibi hataları yakalar.

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

Çağrı Bağımsız Değişkenlerini Denetleme

Bir casusun aldığı bağımsız değişkenleri was.called_with kullanarak doğrulayabilirsiniz. busted, kaydedilen bağımsız değişkenleri beklentinizle karşılaştırır.

Bu, yalnızca bir işlevin çalıştığını değil, doğru şekilde çalıştığını da doğrular.

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

Yer Tutucu Ne Yapar

Bir yer tutucu, bir işlevi tamamen değiştirir; böylece asıl işlev hiç çalışmaz. Gerçek ağ veya disk erişimi gibi yavaş ya da istenmeyen işlemleri atlamak için kullanın.

Bir tablo alanında stub kullanarak yer tutucu oluşturun. Varsayılan olarak yer tutucu hiçbir şey yapmaz ve boş değer döndürür.

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

Yer Tutucuların Dönüş Değerleri

returns ile bir yer tutucunun sabit bir değer döndürmesini sağlayabilirsiniz. Bu, sınanan koda denetimli veriler aktarır.

Artık sınamanız gerçek bağımlılığa hiç bağlı değildir.

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

Taklit Ne Yapar

Bir taklit, var olan bir tabloyu alır ve tüm işlevlerini aynı anda casuslara veya yer tutuculara dönüştürür. Bir nesnenin tamamını izlemek için kullanışlı bir yoldur.

Sarmalamak için mock(obj) çağrısını yapın, ardından tek tek yöntemleri doğrulayın.

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

Yer Tutucu Yöntemlerle Taklit

mock öğesine ikinci bağımsız değişken olarak true aktarılması, her yöntemi yer tutucuya dönüştürür; böylece asıl yöntemlerin hiçbiri çalışmaz. Bu, nesneyi tamamen yalıtır.

Gerçek yöntemlerin kaçınmanız gereken yan etkileri olduğu durumlarda bunu kullanın.

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

İkameleri Geri Yükleme

Casuslar, yer tutucular ve taklitler paylaşılan tabloları değiştirir. Bu nedenle onları geri yüklemeniz gerekir; aksi hâlde sonraki sınamalar ikameyi görür. :revert() veya mock.revert çağrısını yapın.

Sınamalar arasında temiz bir durum sağlamak için geri yüklemeyi after_each içine yerleştirin.

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

Doğru İkam eyi Seçme

Gerçek bir işlevi gözlemlemek için casus, bir işlevi denetimli davranışla değiştirmek için yer tutucu, bir nesnenin tamamını tek seferde sarmalamak için de taklit kullanın.

İşi gören en hafif ikameyi tercih edin. Gereğinden fazla taklit kullanmak sınamaları kırılgan hâle getirebilir ve gerçek hataları gizleyebilir.

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)

Hızlı Denetim

busted sınama ikamelerini ne kadar anladığınızı sınayın.

Özet

Sınama ikameleri, kodu yavaş veya dış bağımlılıklardan yalıtır. Bir casus, asıl işlevi çalıştırırken çağrıları kaydeder; bir yer tutucu, bir işlevi denetimli davranışla değiştirir; bir taklit ise bir nesnenin tamamını sarar.

was.called ve was.called_with ile doğrulama yapın. Sınamaları yalıtılmış tutmak için ikameleri her zaman after_each içinde revert ile geri yükleyin.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Lua öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
40
Dersler
159

Sıkça Sorulan Sorular

“Sahte Nesneler ve Casuslar” dersi ücretsiz mi?

Evet — “Sahte Nesneler ve Casuslar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Sahte Nesneler ve Casuslar” dersinde ne öğreneceğim?

Test edilen kodu yalıtın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Sahte Nesneler ve Casuslar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Neden Test Yapılır
  2. describe ve it Blokları
  3. Doğrulamalar
  4. Sahte Nesneler ve Casuslar
← Lua Academy Sayfasına Dön