Модулното тестване проверява малки парчета код (като функции или класове), за да потвърди, че работят правилно. в 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 включва множество тестове за проверка на свойствата и поведението на низа.
Pythonimport 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(): Изпълнява всички тестове и предоставя интерфейс на командния ред.