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");                           // spy

Aşı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.

  1. Playwright ile E2E testlerinde flaky (kararsız) testleri nasıl önlersiniz?ZorTestFrontend
  2. React Testing Library'nin felsefesi nedir? Örnek bir test yazın.OrtaTestFrontend
  3. Unit, integration ve end-to-end (E2E) test arasındaki fark nedir?OrtaTestFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle