Testlerde mock, stub ve spy arasındaki fark nedir? Ne zaman mock kullanmamalısınız?
Cevap
Hepsi "test dublörü" (test double) türleridir:
- Stub: sabit bir cevap döndüren sahte bağımlılık. "API çağrılınca şu veriyi dön."
- Mock: nasıl çağrıldığı doğrulanan sahte nesne. "Bu fonksiyon tam olarak bir kez, şu parametreyle çağrıldı mı?"
- Spy: gerçek fonksiyonu çalıştırmaya devam ederken çağrıları kaydeder.
import { vi, expect, test } from "vitest";
test("kayıt sonrası e-posta gönderilir", async () => {
const eposta = { gonder: vi.fn().mockResolvedValue(true) }; // mock
await kullaniciKaydet({ ad: "Ayşe" }, eposta);
expect(eposta.gonder).toHaveBeenCalledTimes(1);
});
const spy = vi.spyOn(console, "error"); // spyAşırı mock kullanmak testleri implementasyona bağımlı ve kırılgan yapar: kod doğru çalışsa bile iç yapı değişince test bozulur. Kendi modüllerinizi değil, yalnızca sınırları (ağ, zaman, rastgelelik, dosya sistemi) taklit etmek iyi bir kuraldır.
İlgili Test soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.