# Mocking

Adres: https://softwaredictionary.org/tr/terimler/mocking
Kategori: Test ve Kalite
Son güncelleme: 2026-09-30
Okunuşu: moking

Kısaca: Mocking, kodu yalıtılmış biçimde test etmek için veritabanı ya da API gibi gerçek bir bağımlılığı kontrol ettiğiniz bir sahteyle değiştiren test tekniğidir.

## Mocking nedir?

Mocking, test ettiğiniz kodun gerçek bir bağımlılığını, tamamen sizin kontrolünüzde olan ve mock adı verilen bir vekil nesneyle değiştirmek demektir. Bağımlılık bir veritabanı, bir ödeme API'si, sistem saati ya da bir e-posta servisi olabilir. Mock devredeyken test, gerçek şeye dokunmadan hızlı ve öngörülebilir biçimde çalışır.

Mock, hazır yanıtlarla programlanır; örneğin 42 numaralı kimlik istendiğinde belirli bir kullanıcıyı döndürür, ve nasıl çağrıldığını kaydeder. Böylece test hem kodun sonucunu hem de etkileşimlerini kontrol edebilir; örneğin e-posta servisinin doğru adresle tam olarak bir kez çağrıldığını. Çoğu test çerçevesi mock oluşturmak için yardımcılar içerir ve bağımlılık enjeksiyonu (dependency injection) onları kodun içine vermeyi kolaylaştırır.

Bir uçuş simülatörüne benzer: simülatör tam olarak talimat verildiği gibi davrandığı için pilotlar gerçek bir uçağı riske atmadan acil durumları çalışabilir. Mock'lar birim testlerinde yoğun olarak kullanılır; ağ zaman aşımı gibi gerçekte tetiklenmesi zor hataları simüle etmek ve gerçek bir kredi kartından para çekmek gibi yan etkilerden kaçınmak için de işe yararlar.

Mock, testlerde kullanılan her türlü sahte nesne için genel terim olan test double'ın bir türüdür. Stub yalnızca sabit veri döndürür, fake bellek içi veritabanı gibi daha basit ama çalışan bir uygulamadır, mock ise ayrıca nasıl kullanıldığını da doğrular. Çok fazla mock kullanmak yaygın bir hatadır; çünkü gerçek entegrasyon bozukken bile testler geçebilir, bu yüzden entegrasyon testlerine hâlâ ihtiyaç vardır.

## Önemli noktalar

- Mock, gerçek bir bağımlılığı kontrol edilebilir bir sahteyle değiştirir.
- Mock'lar testleri hızlı, tekrarlanabilir ve yan etkisiz kılar.
- Mock'lar yalnızca veri döndürmekle kalmaz, nasıl çağrıldıklarını da doğrulayabilir.
- Stub, fake ve mock'ların hepsi test double türleridir.
- Aşırı mock kullanımı gerçek entegrasyon hatalarını gizleyebilir.

## Örnek: Node.js test çalıştırıcısıyla bir e-posta servisini mock'lamak

```javascript
import { test, mock } from "node:test";
import assert from "node:assert/strict";

async function welcomeUser(user, emailService) {
  await emailService.send(user.email, "Welcome!");
}

test("sends a welcome email", async () => {
  const emailService = { send: mock.fn(async () => {}) }; // no real email is sent
  await welcomeUser({ email: "ada@example.com" }, emailService);

  assert.equal(emailService.send.mock.callCount(), 1);
  assert.deepEqual(emailService.send.mock.calls[0].arguments, ["ada@example.com", "Welcome!"]);
});
```

## Sık sorulan sorular

**Mock ile stub arasındaki fark nedir?**

Stub, test edilen kodun çalışabilmesi için yalnızca önceden belirlenmiş veriyi döndürür. Mock ise nasıl çağrıldığını da kaydeder; böylece test, bir metodun çağrılıp çağrılmadığı ve hangi argümanlarla çağrıldığı gibi etkileşimleri doğrulayabilir.

**Mock'lar ne zaman kullanılmamalı?**

Sahibi olduğunuz basit ve hızlı kodu mock'lamaktan, ayrıca testin yalnızca mock'larınızı kontrol edeceği kadar çok mock kullanmaktan kaçının. Bir veritabanına karşı çalışan sorgular gibi gerçek bileşenlerin birlikte çalıştığını doğrulamak için bunun yerine entegrasyon testleri kullanın.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
