CodeBlanks Logo Icon CodeBlanks

MagicMock

MagicMock ile magic metot destekli mock'u öğrenirsin.

MagicMock

MagicMock, Mock'un genişletilmiş halidir; sihirli (dunder) metotları da destekler. __len__, __iter__, __getitem__ gibi metotların davranışını taklit edebilirsin.

Standart Mock bu metotları çağırınca hata verir ya da anlamsız sonuç döner. MagicMock ise onları denetlenebilir hâle getirir.

from unittest.mock import MagicMock

m = MagicMock()
m.__len__.return_value = 3
print(len(m))  # 3

Bu, liste benzeri ya da sözlük benzeri nesneleri taklit etmek için birebirdir.

MagicMock ile liste taklidi

MagicMock ile liste benzeri davranışı kolayca taklit edersin. __len__ ile uzunluğu, __getitem__ ile indekslemeyi ayarlarsın.

Örnek: m.__len__.return_value = 2 ve m.__getitem__.return_value = "a". Sonra len(m) 2 döner; m[0] "a" döner.

Bu teknik, gerçek bir veri kaynağına gitmeden liste arayüzünü test etmeni sağlar. Sihirli metotlar üzerinde denetim, sahte nesneyi gerçekçi yapar.

Uygulama MagicMock ile uzunluk taklidi

unittest.mock modülünden MagicMock içe aktar. m = MagicMock() ile sahte nesne oluştur. m.__len__.return_value = 3 ayarla; print(len(m)) çağrısı yapsın.

Başlangıç kodu

main.py
# unittest.mock içinden MagicMock içe aktar
# m adında MagicMock oluştur; __len__ dönüş değeri 3 olsun
# len(m) çağrısının sonucunu yazdır

Örnek çözüm

main.py
from unittest.mock import MagicMock

m = MagicMock()
m.__len__.return_value = 3
print(len(m))

Beklenen çıktı

3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 MagicMock kullanımlarını eşleştir

Kavram Anlamı
MagicMock() Sihirli metotlu sahte
m.__len__ len() davranışı
m.__iter__ for döngüsü davranışı
m.__getitem__ index davranışı

2 MagicMock import et

Soru
from unittest.mock import ____

m = MagicMock()
m.__len__.return_value = 3
print(len(m))
Cevap
from unittest.mock import MagicMock

m = MagicMock()
m.__len__.return_value = 3
print(len(m))

Açıklama: MagicMock sınıfı unittest.mock modülünden gelir.

3 Standart Mock ile hangi metot çağrısı SORUN çıkartır?

  • len(m) Doğru cevap
  • m.attr
  • m.normal_method()
  • m()

Açıklama: len() __len__ sihirli metodunu çağırır; standart Mock bunu iyi desteklemez. MagicMock gerekir.

İleri seviye bölümündeki tüm dersler