Pythontr

husonet | Tarih: 05.07.2019

Django için Unit Test oluşturma

Bu yazımızda Django kullananların Unit Test'i nasıl kullanabilecekleri konusunu açıklamaya çalışacağım.

Artık sitemizde Django üzerine konularda yazı yazmaya karar verdim belki de bu bir direnişti fakat o kadar gelişmiş bir frameworku artık görmemezden gelemeyiz. Bu yazımızda basit bir konu olacak fakat bence development süreçlerinin en önemli konularından biri.



Proje içinden app klasörümüze gecelim cd uygulama/app/app ve test edeceğimiz hesapla.py dosyasını yazalım.


vim uygulama/app/app/hesapla.py


def ekle(x, y):
"""X ve Y sayisini ekler ve return degeri olarak toplamini döner"""
return x + y


def cikar(x, y):
"""X degerinden Y degerini cikarir ve return degeri olarak cikartama
sonucunu dondurur"""
return x - y


unit test yapacagimiz dosyamızın adı da tests.py olsun aynı dizinde olması yeterlidir. Django unit testi çalıştırırken test parametresini hem dosya isimlerinde hemde metodlarda arar bu noktaya dikkat etmek önemlidir.


from django.test import TestCase
from app.calc import ekle, cikar


class HesaplaTests(TestCase):

def test_ekle_sayi(self):
"""iki sayi toplaminin esitligini kontrol eder"""
self.assertEqual(ekle(5, 2), 7)

def test_cikar_sayi(self):
"""iki sayinin cikarma isleminin sonucunu kontrol eder"""
self.assertEqual(cikar(9, 4), 5)

Test dosyamız hazır artık Console üzerinden çalıştırabiliriz.


python manage.py test

Hiç bir sorunla karşılamazsanız aşağıdaki gibi bir sonuç elde edersiniz.


Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK


Belirli bir unit test'in çalıştırılması
python manage.py test core.tests.test_recipe.RecipeTest

Coverage uygulama
pip install coverage
coverage run --source='core' manage.py test core.tests.test_recipe.RecipeTest
coverage html
open htmlcov/index.html

Ek bilgi vermek istiyorum flake8 kütüphanesinide test süreçlerine dahil edebilirsiniz oldukça faydalı bir tool python syntax tarzı denetimleri yapıyor koyduğunuz boşluğa kadar kontrol ediyor.. Kullanım şekli aşağıdaki gibidir.


python manage.py test && flake8