Unit Tests Python

Защо пишем тестове?

  •  за да знаем във всеки момент дали кодът ни работи

  • за да имаме удобен начин за проверка на програмата

  • по-лесна поддръжка (промяна) на кода

  • по-надежден софтуер

  • и още . . .?

Как тестваме в Python? (1)

import unittest
from bill import Bill


class TestBill(unittest.TestCase):
    def setUp(self):
        self.bill = Bill(5)

    def test_bill_init(self):
        self.assertEqual(self.bill._amount, 5)

    def test_bill_str(self):
        self.assertEqual(str(self.bill), "A 5$ bill")

    def test_bill_eq(self):
        bill2 = Bill(10)
        bill3 = Bill(5)
        self.assertNotEqual(self.bill, bill2)
        self.assertEqual(self.bill, bill3)

if __name__ == '__main__':
    unittest.main()
  • импортваме unittest библиотеката
  • импортваме променливите, методите, класовете , които ще тестваме и използваме
  • създаме тестов class, който наследява unittest.TestCase
  • дефинираме метод setUp(self),  в който поставяме обектите, който използваме в тестовете по надолу
  • дефинираме метод tearDown(self),  в който почистваме състоянието на програмата

Как тестваме в Python? (2)

  • дефинираме методи (тестове), които са независими 1 от друг
  • в тестове използваме методите, които наследяваме от unittest - assertEqual(), assertTrue(), assertFalse() и т.н.

.... (3)

if __name__ == '__main__':
    unittest.main()
def test_bill_init(self):
    self.assertEqual(self.bill._amount, 5)

def test_bill_str(self):
    self.assertEqual(str(self.bill), "A 5$ bill")
  • задължително поставяме накрая на тестовия файл

Как пускаме тестовете?

python3 tests_week01_dive_into_python.py 
..........
----------------------------------------------------------------------
Ran 10 tests in 0.002s

OK
watch python3 tests_week01_dive_into_python.py 
Every 2,0s: python3 tests_week01_dive_into_python.py  
-------------------------------------------------------------------
Ran 10 tests in 0.002s

OK

Правила

Добри практики

Всеки метод трябва да прави точно едно нещо!

Всеки тест трябва да проверява точно едно нещо!

И още ...

  • Тестовете трябва да са независими един от друг
  • Точни и ясни имена на тестовете
  • Тест за  всяко парче код
  • Хващане на частни случаи

Тестовете са най-добрият ви приятел !

Python 101-2016 Testing

By Hack Bulgaria

Python 101-2016 Testing

  • 1,049