CodeBlanks Logo Icon CodeBlanks

side_effect

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()  # 3

return_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 RuntimeError

return_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

main.py
# 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

main.py
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

Soru
from unittest.mock import Mock

m = Mock()
m.____ = ValueError("hata")
Cevap
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üş

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