Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

4.2 Введение в UnitTest
2 из 2 шагов пройдено

В этом разделе вы узнаете о модульном тестировании в Python, используя модули unittest, чтобы в дальнейшейшем лучше понимать как использовать модульное тестирование в Django.

Что такое модульный тест

Модульный тест — это автоматизированный тест, который:

  • Проверяет небольшой фрагмент кода, называемый модулем. Модуль может быть функцией или методом класса.
  • Выполняется очень быстро.
  • Выполняется изолированно.

Идея модульного тестирования состоит в том, чтобы проверить каждую маленькую часть вашей программы, чтобы убедиться, что она работает правильно.

Оно отличается от интеграционного тестирования, которое проверяет, хорошо ли работают вместе разные части программы.

Цель юнит-теста — найти ошибки. Кроме того, модульный тест может помочь реорганизовать существующий код, чтобы сделать его более тестируемым и надежным.

Python предоставляет вам встроенный модуль unittest, который позволяет эффективно проводить модульное тестирование.

Пример модульного тестирования Python

Предположим, у вас есть класс Square с вызываемым свойством lengthи методом area(), возвращающим площадь квадрата.

Класс Square находится в модуле square.py:

class Square:
    def __init__(self, length) -> None:
        self.length = length

    def area(self):
        return self.length * self.length


Чтобы протестировать класс Square, вы должны создать новый файл с именем test_square.py и импортировать модуль unittest следующим образом:

import unittest


Поскольку test_square.py необходимо получить доступ к классу Square, вы должны импортировать его из square.py модуля:

import unittest

from square import Square


Чтобы создать тестовый пример, вы определяете новый класс TestSquare, который наследуется от класса TestCase модуля unittest:

class TestSquare(unittest.TestCase):
   pass


Чтобы протестировать метод area(), вы добавляете метод test_area() в класс TestSquare следующим образом:

import unittest

from square import Square


class TestSquare(unittest.TestCase):
    def test_area(self):
        square = Square(10)
        area = square.area()
        self.assertEqual(area, 100)


В методе test_area():

  • Сначала создайте новый экземпляр класса Square и инициализируйте его длину числом 10.
  • Во-вторых, вызовите метод area(), возвращающий площадь квадрата.
  • В-третьих, вызовите метод assertEqual(), чтобы проверить, равен ли результат, возвращаемый методом area() ожидаемой площади 100.

Если площадь равна 100, то тест assertEqual() пройден. В противном случае тест assertEqual() провалится.

Перед запуском теста необходимо вызвать функцию main() модуля unittest следующим образом:

import unittest

from square import Square


class TestSquare(unittest.TestCase):
    def test_area(self):
        square = Square(10)
        area = square.area()
        self.assertEqual(area, 100)


if __name__ == '__main__':
    unittest.main()


Чтобы запустить тест, вы открываете терминал, переходите в папку и выполняете следующую команду:

python test_square.py

Он выведет следующее:

Вывод показывает, что один тест пройден, обозначенный точкой ..

Если тест не пройден, вы увидите букву F вместо точки.


Чтобы получить более подробную информацию о результате теста, вы передаёте в функцию unittest.main() аргумент verbosity со значением 2:

import unittest

from square import Square


class TestSquare(unittest.TestCase):
    def test_area(self):
        square = Square(10)
        area = square.area()
        self.assertEqual(area, 100)


if __name__ == '__main__':
    unittest.main(verbosity=2)


Если вы снова запустите тест:

python test_square.py

вы получите подробную информацию:

В выходном списке тестовый пример с результатом ok на этот раз вместо точки ..


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.