Yuqorida matn qaytaruvchi funksiyani tekshirishni ko'rdik. Keling endi sonlar bilan ishlashni ko'ramiz. Misol tariqasida yangi circle.py modulini yaratamiz va uning ichida doiraning yuzini (πr2\pi r^2πr2) va perimetrini (2πr2\pi r2πr) hisoblaydigan funksiyalar yozamiz:

def getArea(r,pi=3.14159):
   """Doiraning yuzini qaytaruvchi funksiya"""
   return pi*(r**2)

def getPerimeter(r,pi=3.14159):
   """Doiraning perimetrini qaytaruvchi funksiya"""
   return 2*pi*r

E'tibor bering, ikki funksiya ham, agar foydalanuvchi aniq qiymat bermasa, π\piπ ning qiymatini standart argument sifatida  3.14159 ga teng deb qabul qilayapti. Ushbu funksiyalarni tekshirish uchun alohida  circle_test.py test dasturini yozamiz. Matnlardan farqli ravishda, sonlarni taqqoslash uchun assertAlmostEqual() metodidan foydalanamiz. Bu metod, ikki sonni nuqtadan keyin 7 xonagacha aniqlikda tekshiradi:

import unittest
from circle import getArea, getPerimeter

class CircleTest(unittest.TestCase):
   def test_area(self):
       self.assertAlmostEqual(getArea(10), 314.159)
       self.assertAlmostEqual(getArea(3),28.27431)
   def test_perimeter(self):
       self.assertAlmostEqual(getPerimeter(10), 62.8318)
       self.assertAlmostEqual(getPerimeter(4), 25.13272)
       
unittest.main())

Bu yerda e'tibor qiling, biz har bir funksiya uchun 2 tadan test yozdik. Testni bajaramiz va quyidagi natijani olamiz:

Ran 2 tests in 0.001s

OK

MANTIQIY QIYMATLARNI TEKSHIRISH

Agar funksiya mantiqiy qiymat qaytarsa, bunday funksiyalarni assertTrue() va assertFalse() metodlari yordamida tekshirishimiz mumkin.

Quyidagi funksiyamiz kiritilgan son tub yoki yo'q ekanini tekshiradi:

def tubSonmi(n):
   if n==2 or n==3: return True
   if n%2==0 or n<2: return False
   for i in range(3, int(n**0.5)+1, 2):   # faqat toq sonlarni tekshiramiz
       if n%i==0:
           return False    
   return True

Funksiyani alohida tubSonmi.py fayliga saqlaymiz. Funksiyani tekshirish uchun tubSon_test.py dasturini yozamiz:

import unittest
from tubSonmi import tubSonmi

class tubSonTest(unittest.TestCase):
   def test_true(self):
       self.assertTrue(tubSonmi(7))
       self.assertTrue(tubSonmi(193))
       self.assertTrue(tubSonmi(547))
   def test_false(self):
       self.assertFalse(tubSonmi(6))
       self.assertFalse(tubSonmi(265))
       self.assertFalse(tubSonmi(489))
       
unittest.main()

Test davomida tubSonmi() funksiyasini bir nechta tub (7, 193, 547) va tub bo'lmagan (6, 265, 489) sonlar bilan chaqirdik. Bunda assertTrue() metodi funksiyamiz haqiqatdan ham True qiymatini qaytarishini, assertFalse() metodi esa funksiyamiz False qiymat qaytarishini tekshiradi.

TAQQOSLASH METODLARI

TestCase klassi tarkibidagi boshqa taqqoslash metodlari ham mavjud:

MetodNimani taqqoslaydi
assertEqual(a, b)a == b
assertNotEqual(a, b)a != b
assertTrue(x)x ning qiymati True
assertFalse(x)x ning qiymati False
assertIs(a, b)a bu b
assertIsNot(a, b)a bu b emas
assertIsNone(x)x ning qiymati None
assertIsNotNone(x)x ning qiymati None emas
assertIn(a, b)a b ning ichida
assertNotIn(a, b)a b ning ichida emas
assertIsInstance(a, b)a b ning vorisi
assertNotIsInstance(a, b)a b ning vorisi emas