# 36 FUNKSIYANI TEKSHIRISH
Dasturni tekshiruvchi dastur yozamiz
KIRISH
Dastur davomida yangi funksiya yoki klass yozar ekanmiz, ularni to'g'ri ishlashini ham tekshirishimiz tabiiy. Kodni tekshirish, kelajakda dasturimiz xato ishlashining oldini oladi. Odatda, funksiya va klasslarni tekshirish uchun alohida test dasturlar yozishimiz mumkin. Bunday dasturlar funksiyaga turli parametrlar orqali murojat qilib, undan qaytgan qiymatlar to'g'ri yoki xato ekanini tekshiradi.
Pythonda bu jarayonni osonlashtirish uchun maxsus unittest
moduli mavjud. unittest
yordamida alohida funksiya, obyekt yoki butun boshli modulni ham tekshirshimiz mumkin. Lekin, tavsiya qilingan usuli bu testni dastavval kichik qismlardan boshlab, kengaytirib borish.
FUNKSIYANI TEKSHIRISH
Boshlanishiga biror sodda funksiya yozamiz. Quyidagi funksiya foydalanuvchi ismi va familiyasini qabul qiladi, va ism familiyani jamlab qaytaradi:
Funksiyani tekshiramiz:
Keling endi shu funksiyamizni tekshirish uchun dastur yozamiz. Bu yerda ikki narsaga ahamiyat beramiz: avvalo funksiyamizni alohida modulda saqlaymiz (name.py
), ikkinchidan test dasturimizni ham alohida modulda yozamiz va unga ham tushunarli nom beramiz (masalan, name_test.py
).
Test faylimizning (name_test.py
) tarkibi quyidagicha bo'ladi:
Dasturni tahlil qilamiz:
Dastavval unittest modulini chaqiramiz (
import unittest
)Keyingi qatorda
name.py
modulimizdan tekshirmoqchi bo'lgan funksiyamizni ham yuklab olamiz (get_full_name
).4-qatorda test klassini yaratamiz, bu klass
unittest.TestCase
klassidan meros oladi. Bu klass berilgan parametrlar uchun funksiyadan qaytgan qiymatlarni tekshirishga mo'ljallangan. Klassimizga o'zimiz istagan, tushunarli nom beramiz (NameTest
).Klassimiz ichida
test_toliq_ism
metodini yaratdik. Bu metodget_full_name
funksiyasidan qaytgan qiymatni biz avvaldan bergan qiymatga teng yoki yo'q ekanini tekshiradi. Buning uchun esa maxsus.assertEqual()
metodidan foydalandik. E'tibor bering, test medotlarning nomi har doimtest
so'zi bilan boshlanishi kerak.assertEqual()
metodi ikki qiymat qabul qiladi va ularning teng ekanligini tekshiradi (assert ingliz tilidan tasdiqlash deb tarjima qilinadi). Agarget_full_name('alijon','valiyev')
funksiyamiz to'g'ri ishlasa, funksiyadan'Alijon Valiyev'
qiymati qaytishi kerak.assertEqual()
metodi aynan shuni tekshirishga mo'ljallangan.So'nggi qatorda unittest klassinini chaqiramiz, bu esa o'z navbatida biz yuqorida yozgan testni chaqiradi.
name_test.py
dasturimizni bajaramiz va quyidagi natijani olamiz:
Natijadan bitta test bajarilganini va va bu test muvaffaqiyatli o'tganini (OK
) ko'rishimiz mumkin.
Keling endi dars boshida yaratilgan get_full_name
funksiyamizga o'zgartirish kiritamiz:
Bu safar funksiyamiz otasining ismini ham qabul qiladi, lekin bu argument ixtiyoriy.
Testimizga ham o'zgartirish kiritamiz. Bu safar ikki hil ism uchun ikkita alohida test bajaramiz:
Testni bajaramiz, va quyidagi natijani olamiz:
Bu safar funksiyamiz 1 ta testdan yiqildi (failures=1
). Biz kutgan natija (Hasan Olimovich Husanov) va funksiya qaytargan natija (hasan olimovich husanov) bir hil emas. Ya'ni, ism familiya va otasining ismi katta harflar bilan yozlishi kerak edi, lekin natija unday emas. Demak funksiyamizda xato bor. Xatoni to'g'rilaymiz:
Testni qaytadan chaqiramiz:
Bu safar funksiyamiz ikki testdan ham muvaffaqiyatli o'tdi.
SONLARNI TEKSHIRISH
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 ( ) va perimetrini ( ) hisoblaydigan funksiyalar yozamiz:
E'tibor bering, ikki funksiya ham, agar foydalanuvchi aniq qiymat bermasa, 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:
Bu yerda e'tibor qiling, biz har bir funksiya uchun 2 tadan test yozdik. Testni bajaramiz va quyidagi natijani olamiz:
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:
Funksiyani alohida tubSonmi.py
fayliga saqlaymiz. Funksiyani tekshirish uchun tubSon_test.py
dasturini yozamiz:
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:
Metod | Nimani taqqoslaydi? |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
AMALIYOT
Quyidagi funksiyalarni yarating, va ularning har biri uchun test dasturlarini yozing:
Uchta son qabul qilib, ulardan eng kattasini qaytaruvchi funksiya
Matnlardan iborat ro'yxat qabul qilib, ro'yxatdagi har bir matnning birinchi harfini katta harfga o'zgatiruvchi funksiya
Berilgan sonlar ro'yxatidan juft sonlarni ajratib oluvchi funksiya
Berilgan son Fibonachchi ketma-ketligida uchraydimi (
True
) yoki yo'q (False
) qaytaruvchi funksiya yozing.
KODLAR
Last updated