- Konu sahibi
- #1
Python'da bir işlemin sonucunu kontrol etmek için önce döndürülen değeri görün, ardından beklediğiniz değerle karşılaştırın. Tek bir denemede
Bir fonksiyonun döndürdüğü değer ile ekrana yazdırdığı metin aynı şey değildir.
Bu örneği
Sonuç
Aynı davranışı tekrar tekrar kontrol etmek için Python'un standart kütüphanesindeki
Terminalde dosyanın bulunduğu dizine geçip
Kendi projenizde örnekteki fonksiyon yerine gerçek fonksiyonu uygun modülden içe aktarın. Normal girdilerin yanında sıfır, boş değer veya geçersiz girdi gibi fonksiyonunuzun sözleşmesi açısından önemli durumları da test edin. Geçen testler yalnızca ele alınan durumların beklentilere uyduğunu gösterir.
Program karşılaştırmaya ulaşmadan durursa terminaldeki hata dökümünün son satırındaki hata türünü ve mesajını, ardından işaret edilen dosya ve satırı inceleyin. Örneğin
Ondalıklı hesaplarda küçük temsil farkları doğrudan eşitlik karşılaştırmasını yanıltabilir. Yaklaşık eşitlik gerekiyorsa
print() yeterli olabilir; aynı kontrolü farklı girdilerle tekrarlamak için test yazmak daha kullanışlıdır. Sonuç beklenenden farklıysa girdiyi, değer türünü ve hata mesajını inceleyerek sorunun hangi adımda ortaya çıktığını belirleyebilirsiniz.Çıktıyı ve döndürülen değeri kontrol edin
Bir fonksiyonun döndürdüğü değer ile ekrana yazdırdığı metin aynı şey değildir.
return değeri çağıran koda verir; print() ise değeri ekranda gösterir. Örneğin bir fonksiyonun dönüş değerini değişkene atayıp hem değerini hem türünü görebilirsiniz:
Python:
def toplam(a, b):
return a + b
sonuc = toplam(4, 6)
print("Sonuç:", sonuc)
print("Tür:", type(sonuc).__name__)
print("Beklenen sonuç mu?", sonuc == 10)
Bu örneği
kontrol.py adıyla kaydedip terminalde dosyanın bulunduğu dizinden python kontrol.py komutuyla çalıştırın. Ortamınızda komut python3 olabilir. Ekranda sırasıyla Sonuç: 10, Tür: int ve Beklenen sonuç mu? True görünmesi beklenir. True, bu girdiler için sonucun 10'a eşit olduğunu gösterir; fonksiyonun bütün girdilerde doğru çalıştığını kanıtlamaz.Sonuç
None ise fonksiyonun ilgili yürütme yolunda değer döndürüp döndürmediğine bakın. Yalnızca print(a + b) kullanan bir fonksiyon ekrana toplamı yazdırır, ancak açıkça değer döndürmediği için çağrının sonucu None olur. Sonucu başka işlemlerde kullanmak istiyorsanız uygun yerde return kullanın.Beklenen sonuçları test edin
Aynı davranışı tekrar tekrar kontrol etmek için Python'un standart kütüphanesindeki
unittest modülünü kullanabilirsiniz. Aşağıdaki varsayımsal örneği test_toplam.py adıyla kaydedin:
Python:
import unittest
def toplam(a, b):
return a + b
class ToplamTesti(unittest.TestCase):
def test_pozitif_sayilar(self):
self.assertEqual(toplam(4, 6), 10)
def test_negatif_sayi(self):
self.assertEqual(toplam(-3, 1), -2)
if __name__ == "__main__":
unittest.main()
Terminalde dosyanın bulunduğu dizine geçip
python test_toplam.py komutunu çalıştırın. Testler geçerse raporda iki testin çalıştığı ve OK sonucu görülür. FAILED görünürse rapordaki test adını ve beklenen ile gerçek değerleri okuyun; örneğin beklenen değer yanlış yazılmışsa testi, hesaplama yanlışsa fonksiyonu düzeltip yeniden çalıştırın.Kendi projenizde örnekteki fonksiyon yerine gerçek fonksiyonu uygun modülden içe aktarın. Normal girdilerin yanında sıfır, boş değer veya geçersiz girdi gibi fonksiyonunuzun sözleşmesi açısından önemli durumları da test edin. Geçen testler yalnızca ele alınan durumların beklentilere uyduğunu gösterir.
Hata veya beklenmeyen değerle karşılaşırsanız
Program karşılaştırmaya ulaşmadan durursa terminaldeki hata dökümünün son satırındaki hata türünü ve mesajını, ardından işaret edilen dosya ve satırı inceleyin. Örneğin
TypeError, kullanılan değerlerin ilgili işlem için uygun olmadığını gösterebilir. Girdilerin değerini ve türünü kontrol edin; gerekiyorsa girdiyi uygun biçime dönüştürüp programı tekrar çalıştırın.Ondalıklı hesaplarda küçük temsil farkları doğrudan eşitlik karşılaştırmasını yanıltabilir. Yaklaşık eşitlik gerekiyorsa
math.isclose() kullanın ve kabul edilebilir toleransı işleminize göre belirleyin. Tanılama için geçici çıktı ekliyorsanız parola, anahtar ve kişisel veri yazdırmayın; işiniz bittiğinde bu çıktıları kaldırın.