MagicMock
- Python kursu
- İleri seviye
- Ders 21/83
- 5 dk
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)) # 3Bu, 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
# 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
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
from unittest.mock import ____
m = MagicMock()
m.__len__.return_value = 3
print(len(m))
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.