Ana içeriğe geç

Mocking

Okunuşu
moking
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/mocking

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'lamakjavascript
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.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar