Python’da doctest Kullanarak İstisnaları Kontrol Etmek

Python’da kod yazarken, işlevlerimizin beklenildiği gibi davrandığından emin olmamız sıkça gereklidir, özellikle de hata yönetimi söz konusu olduğunda. Sık karşılaşılan senaryolardan biri, bir işlevin belirli koşullar altında bir istisna oluşturup oluşturmadığını test etmektir. Python’un doctest modülünü testlerinizi yürütmek için kullanıyorsanız, şu soruyu soruyor olabilirsiniz: doctest ile bir istisnanın atılmasını kontrol edebilir miyim? Cevap kesinlikle evet! Python işlevlerinizde istisnaları doğrulamak için doctest‘i nasıl kullanacağımızı keşfedelim.

Problem: İstisnaları Test Etmek

foo(x) adlı bir işlevi göz önünde bulunduralım. Bu işlev, argümanı sıfırdan küçükse bir istisna atacak şekilde tasarlanmıştır. Burada temel soru, bu senaryoda işlevin doğru davrandığını doğrulayan bir doctest yazmanın nasıl olacağıdır. Özellikle, sıfırdan küçük bir değer geçirildiğinde, bir şeylerin ters gittiğini göstermek için bir istisnanın atıldığından emin olmak istiyoruz.

Örnek İşlev

İşte foo(x) işlevinin basit bir versiyonu:

def foo(x):
    if x < 0:
        raise ValueError("x negatif olmamalıdır")
    return x

Çözüm: Bir doctest Yazmak

İstisnaları kontrol eden bir doctest oluşturmak için aşağıdaki yaklaşımı kullanacağız. doctest‘imizde, foo() çağrıldığında bir istisna atılmasını beklediğimizi belirtebiliriz. İşte bunu adım adım nasıl gerçekleştireceğimiz:

Adım 1: Doctest’i Yazın

Fonksiyonunuzun docstring’inde, beklenen istisnayı gösteren bir test durumu ekleyebilirsiniz. Bu aşağıdaki gibi görünür:

def foo(x):
    """
    x negatif değilse x'i döndürür.
    
    Atar:
        ValueError: Eğer x < 0 ise.
    
    Örnekler:
    >>> foo(-1)
    Traceback (en son çağrı en son):
      ...
    ValueError: x negatif olmamalıdır
    >>> foo(3)
    3
    """
    if x < 0:
        raise ValueError("x negatif olmamalıdır")
    return x

Adım 2: Doctest’i Çalıştırın

doctest‘i çalıştırmak için, Python betiğinizin en altına şu kod parçacığını ekleyin:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

Adım 3: Beklenen Çıktı

Betiği çalıştırdığınızda, doctest docstring içindeki örnekleri işleyecektir. Her şey düzgün çalışıyorsa, hiçbir çıktı görmeyeceksiniz (bu, tüm testlerin geçtiği anlamına gelir). Eğer istisna beklenildiği gibi atılmazsa, doctest bir hatayı rapor edecektir.

Ek Kaynaklar

doctest‘in modüllerinizde nasıl etkili bir şekilde kullanılacağı hakkında daha fazla bilgi için resmi doctest modül belgelerine göz atın.

Sonuç

doctest ile istisnaların doğru bir şekilde atıldığını doğrulamak yalnızca mümkün değil; aynı zamanda oldukça da basittir! Fonksiyonunuzun docstring’ine birkaç satır ekleyerek, kodunuzun davranışını etkili bir şekilde belgeleyebilir ve test edebilirsiniz, böylece beklenen desenlere uyduğundan emin olabilirsiniz. Yeni işlevler yazıyor ya da mevcut olanları test ediyor olsanız da, doctest kodunuzun yanında doğrudan örnek odaklı testler dahil etmenin güçlü bir yolunu sunar. Kodunuzu sağlam hale getirmeye devam edin, iyi kodlamalar!