logo

Урок за Python Unittest | Единично тестване в Python с помощта на unittest Framework

Модулното тестване проверява малки парчета код (като функции или класове), за да потвърди, че работят правилно. в Python това се прави с рамката unittest, която е вградена в стандартната библиотека и следва стила xUnit. Модулът unittest се използва широко, защото:

  • Не е необходима настройка: идва предварително инсталиран с Python.
  • Структуриран: поддържа тестови случаи, фиксирани твърдения и тестови пакети.
  • Автоматизирано: може да открива и изпълнява тестове в целия проект.
  • Стабилен и многофункционален: надежден за проекти от всякакъв размер с лесна интеграция в други инструменти.

Това прави unittest надежден избор за създаване на систематични и автоматизирани тестове в Python.

Утвърждаване на методи в Unittest Framework

unittest  има много методи за потвърждаване на типовете стойности и съществуването на променливи. По-долу са някои от методите, които обикновено се използват за писане на твърдения:



за цикъл java

Метод

Описание

.assertEqual(a b)

Проверява дали a е равно на b подобно на израза a == b.

.assertTrue(x)

Утвърждава, че булевата стойност на x е True, еквивалентна на bool(x) е True.

.assertIsInstance(a b)

Твърди, че a е екземпляр на клас b, подобно на израза isinstance(a b).

mvc за java

.assertIsNone(x)

Гарантира, че x е None подобно на израза x is None.

.assertFalse(x)

Уверява, че булевата стойност на x е False, подобно на bool(x) е False.

.assertIs(a b)

Проверява дали a е идентично на b, подобно на израза a е b.

.assertIn(a b)

задаване на разделител java

Проверява дали a е член на b подобно на израза a в b.

OOP концепции, поддържани от Unittest Framework

Методът White Box Testing се използва за Unit тестове. По-долу са някои от поддържаните oops концепции от Unitttest framework:

  • тестово приспособление: Приспособлението за тестване се използва като базова линия за провеждане на тестове, за да се гарантира, че има фиксирана среда, в която се изпълняват тестовете, така че резултатите да са повторими. Примери: създаване на временни бази данни или стартиране на сървърен процес.
  • тестов случай: Тестовият случай е набор от условия, които се използват, за да се определи дали тествана система работи правилно.
  • тестов пакет: Тестовият пакет е колекция от тестови случаи, които се използват за тестване на софтуерна програма, за да се покаже, че тя има определен набор от поведения чрез изпълнение на обобщените тестове заедно.
  • тест бегач: Тестовият инструмент е компонент, който настройва изпълнението на тестове и предоставя резултата на потребителя.

Пример за Python Unittest

Пример 1: Ще напишем проста функция add(), която връща сумата от две числа. С помощта на unittest framework ние създаваме тестов клас TestAddFunction, за да проверим различни сценарии на тази функция.

Python
#test.py  import unittest def add(a b): return a + b class TestAddFunction(unittest.TestCase): def test_add_positive_numbers(self): self.assertEqual(add(1 2) 3) def test_add_negative_numbers(self): self.assertEqual(add(-1 -2) -3) def test_add_mixed_numbers(self): self.assertEqual(add(1 -2) -1) self.assertEqual(add(-1 2) 1) if __name__ == '__main__': unittest.main() 

За да стартирате модулните тестове, изпълнете следната команда във вашия терминал:

python test.py

Изход

...
---------------------------------------------------------------------
Проведе 3 теста за 0,001s

добре

abc с цифри

Ако тестът е неуспешен (напр. очакваната стойност е променена), изходът показва неуспешния тест:

..F
=======================================================================================================
ГРЕШНО: test_add_positive_numbers (__main__.TestAddFunction)
---------------------------------------------------------------------
Обратно проследяване (последното последно обаждане):
Файл 'f:GeeksforGeeksexample_packagemain.py' ред 8 в test_add_positive_numbers
self.assertEqual(add(1 2) 2)
AssertionError: 3 != 2

Проведе 3 теста за 0,001s
НЕУСПЕШНО (неуспехи=1)

Използвайте опцията -v за подробни резултати:

python test.py -v

tcp ip модел

Изход

test_add_mixed_numbers (__main__.TestAddFunction) ... добре
test_add_negative_numbers (__main__.TestAddFunction) ... добре
test_add_positive_numbers (__main__.TestAddFunction) ... добре

Проведе 3 теста за 0,002 s
добре

Възможни резултати при модулно тестване

  • добре -> Всички тестове преминаха.
  • НЕУСПЕХ -> Неуспешно тестово твърдение (AssertionError).
  • ГРЕШКА -> Тестът предизвика неочаквано изключение.

Пример 2: Този пример демонстрира тестване на различни операции с низове с помощта на unittest framework. Класът на тестови случаи TestStringMethods включва множество тестове за проверка на свойствата и поведението на низа.

Python
import unittest class TestStringMethods(unittest.TestCase): def setUp(self): pass # Returns True if the string contains 4 a. def test_strings_a(self): self.assertEqual('a'*4 'aaaa') # Returns True if the string is in upper case. def test_upper(self): self.assertEqual('foo'.upper() 'FOO') def test_isupper(self): self.assertTrue('FOO'.isupper()) self.assertFalse('Foo'.isupper()) def test_strip(self): s = 'geeksforgeeks' self.assertEqual(s.strip('geek') 'sforgeeks') # Returns true if the string splits and matches # the given output. def test_split(self): s = 'hello world' self.assertEqual(s.split() ['hello' 'world']) with self.assertRaises(TypeError): s.split(2) if __name__ == '__main__': unittest.main() 

Изход

.....
---------------------------------------------------------------------
Проведе 5 теста за 0,000 сек

добре

Обяснение:

  • assertEqual(): Проверява дали резултатът отговаря на очакваната стойност.
  • assertTrue() / assertFalse(): Проверява дали условието е True или False.
  • assertRaises(): Потвърждава, че е повдигнато конкретно изключение.
  • тестови_низове_a(): Проверява умножението на знаци.
  • test_upper(): Проверява преобразуването на низа в главни букви.
  • test_isupper(): Проверява свойството за главни букви на низ.
  • test_strip(): Гарантира, че определени символи са премахнати от низа.
  • test_split(): Проверява разделянето на низ и валидира TypeError за невалиден вход.
  • unittest.main(): Изпълнява всички тестове и предоставя интерфейс на командния ред.
Създаване на тест