side_effect
- Python kursu
- İleri seviye
- Ders 22/83
- 5 dk
side_effect ile davranış taklitlerini öğrenirsin.
side_effect
side_effect, bir Mock'un her çağrıda farklı davranmasını sağlar. Üç temel kullanımı vardır: bir liste verirsen sırayla döner; bir fonksiyon verirsen o çağrılır; bir istisna verirsen onu fırlatır.
m = Mock()
m.side_effect = [1, 2, 3]
m() # 1
m() # 2
m() # 3return_value her çağrıda aynı şeyi döner; side_effect ise çağrıdan çağrıya farklı davranır. Bu, ardışık yanıtları ya da hataları taklit etmek için yararlıdır.
Fonksiyon ve istisna yanıtları
side_effect bir fonksiyonsa, Mock her çağrıldığında o fonksiyon çağrılır; dönen değer Mock çağrısının sonucu olur. Bu, çağrı argümanlarına göre farklı dönüş üretmek için yararlıdır.
Bir istisna nesnesi verilirse, Mock çağrılınca o istisna fırlar. Bu, hata yollarını test etmek için kullanılır.
m.side_effect = lambda x: x * 2
m(5) # 10
m.side_effect = RuntimeError("boom")
m() # raises RuntimeErrorreturn_value yerine side_effect kullanınca, çağrı sırasını ve argümanları denetleyebilirsin.
Uygulama side_effect ile sıralı çağrılar
unittest.mock modülünden Mock içe aktar. m = Mock() ile sahte nesne oluştur; m.side_effect = [1, 2, 3] ayarla. print(m()), print(m()) ve print(m()) çağrılarını yap.
Başlangıç kodu
# unittest.mock içinden Mock içe aktar
# m adında Mock oluştur; side_effect listesi [1, 2, 3] olsun
# m() çağrısının sonucunu üç kez yazdırÖrnek çözüm
from unittest.mock import Mock
m = Mock()
m.side_effect = [1, 2, 3]
print(m())
print(m())
print(m())Beklenen çıktı
1 2 3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 side_effect = [1, 2, 3] ayarlanınca ne olur?
- Her çağrı 1 döndürür
- Çağrılar sırayla 1, 2, 3 döndürür Doğru cevap
- Listeyi olduğu gibi döndürür
- Hep 3 döndürür
Açıklama: side_effect liste ise her çağrı sıradaki öğeyi döndürür.
2 side_effect ile istisna
from unittest.mock import Mock
m = Mock()
m.____ = ValueError("hata")
from unittest.mock import Mock
m = Mock()
m.side_effect = ValueError("hata")
Açıklama: side_effect = ValueError(...) ile çağrı bu istisnayı fırlatır.
3 side_effect türlerini eşleştir
| Kavram | Anlamı |
|---|---|
[1, 2, 3] |
Sıralı dönüş |
lambda x: x*2 |
Fonksiyon çağrısı |
ValueError(...) |
İstisna fırlatır |
return_value |
Sabit dönüş |