Учебник по PyUnit: Python Платформа модульного тестирования (с примером)

⚡ Умное резюме

Python Модульное тестирование проверяет небольшие блоки кода изолированно, чтобы выявлять ошибки на ранних стадиях. Здесь вы изучите методы модульного тестирования, фреймворк PyUnit (unittest), его ключевые классы, как разрабатывать тестовые примеры и рабочий пример.

  • 🧪 Что это: Модульное тестирование проверяет небольшие, изолированные фрагменты кода, позволяя выявлять ошибки на ранних стадиях.
  • 🔬 Насыщенность: TDD, заглушки и моки изолируют код, позволяя проводить модульное тестирование независимо друг от друга.
  • 🐍 ПиЮнит: PythonВстроенный модуль модульного тестирования (PyUnit) — это порт модуля... JUnit.
  • 🧱 Ключевые классы: TestCase, TestSuite, TestLoader, TextTestRunner и TestResults.
  • 🤖 Помощь ИИ: Инструменты искусственного интеллекта, такие как Copilot, мгновенно генерируют тестовые примеры для модульного тестирования.

Python Модульное тестирование

Что такое модульное тестирование?

Модульное тестирование in Python делается для выявления ошибок на ранней стадии разработки приложения, когда ошибки менее повторяются и их исправление обходится дешевле.

Модульный тест — это скриптовый тест на уровне кода, разработанный в Python для проверки небольшой «единицы» функциональности. Модульное тестирование — это объектно-ориентированная среда, основанная на тестовых приспособлениях.

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

Python Модульное тестирование в основном включает в себя тестирование конкретного модуля без доступа к какому-либо зависимому коду. Разработчики могут использовать такие методы, как заглушки и макеты, для разделения кода на «модули» и запуска тестирования на уровне модулей для отдельных частей.

  • TDD для разработки через тестирование: Модульное тестирование должно проводиться вместе с Python, и для этого разработчики используют метод разработки через тестирование. В методе TDD вы сначала проектируете Python Модульные тесты, и только потом вы продолжаете писать код, реализующий эту функцию.
  • Заглушки и моки: Это два основных метода, которые имитируют тестируемые поддельные методы. А Пень используется для заполнения некоторой зависимости, необходимой для правильного запуска модульного теста. А издеваться с другой стороны, это поддельный объект, который запускает тесты, в которые мы помещаем утверждение.

    Намерения обоих методов одинаковы: исключить тестирование всех зависимостей класса или функции.

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

Чтобы упростить процесс модульного тестирования и улучшить качество вашего проекта, рекомендуется Python Фреймворк модульного тестирования. Структура модульного тестирования включает в себя

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

  • ПиЮнит: PyUnit поддерживает приспособления, тестовые примеры, наборы тестов и средство запуска тестов для автоматического тестирования кода. В PyUnit вы можете организовывать тестовые примеры в наборы с одинаковыми фикстурами.
  • Нос: Встроенные плагины Nose помогают вам захватывать выходные данные, покрытие кода, документацию и т. д. Синтаксис Nose довольно прост и снижает барьеры при написании тестов. Он расширяет Python unittest, чтобы упростить тестирование.
  • Доктест: Скрипт тестирования Doctest находится в строке документации с небольшой функцией в конце файла. Doctest позволяет вам протестировать ваш код, запустив примеры, включенные в документацию, и проверив, что они вернули ожидаемые результаты. Вариант использования doctest менее подробен и не охватывает особых случаев. Они полезны в качестве выразительной документации основного варианта использования модуля и его компонентов.

Модульное тестирование с помощью PyUnit

Пюнит – это Python порт JUnit. В составе Pyunit модуль unittest содержит пять ключевых классов.

Модульное тестирование с помощью PyUnit

  • TestCase класс: Класс TestCase содержит процедуры тестирования и предоставляет перехватчики для создания каждой процедуры и последующей очистки.
  • Класс TestSuite: он выступает в качестве контейнера сбора и может содержать несколько объектов тестовых наборов и несколько объектов тестовых наборов.
  • Класс TestLoader: этот класс загружает тестовые примеры и наборы, определенные локально или из внешнего файла. Он генерирует объекты тестового набора, которые содержат эти наборы и случаи.
  • Класс TextTestRunner: Для запуска тестов предусмотрена стандартная платформа для выполнения тестов.
  • Класс ТестРезультатс: Предлагает стандартный контейнер для результатов испытаний.

Разработка тестового примера для Python Тестирование с использованием PyUnit

Модульный тест предоставляет базовый класс — тестовый пример, который можно использовать для создания новых тестовых примеров. Для разработки тестового примера используются три набора методов:

Разработка тестового примера для Python

unittest.TestCase

setUp()
teardown()

skipTest(aMesg:string)
fail(aMesg:string)

id():string
shortDescription():string

В первый набор входят крючки для предварительного и последующего тестирования. Метод setup() начинается перед каждой процедурой тестирования, а метод Teardown() — после процедуры.

Второй набор методов контролирует выполнение теста. Оба метода принимают на вход строку сообщения и оба отменяют текущий тест. Но метод Skiptest() прерывает текущий тест, а методfail() полностью его завершает.

Последний или третий метод помогает определить тест. Метод id() возвращает строку, состоящую из имени объекта тестового набора и тестовой процедуры. И метод короткийDescription() возвращает комментарий docstr при запуске каждой процедуры тестирования.

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

В приведенном ниже примере проверяется простая функция add() с помощью модуля unittest. Каждый метод, названный с префиксом test_, запускается автоматически, а assertEqual проверяет результат на соответствие ожидаемому значению.

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

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

Сохраните код и запустите его с помощью команды `python filename.py`. Программа запуска модульных тестов сообщит, сколько тестов прошло успешно, а сколько — нет.

Преимущества использования Python Модульное тестирование

  • Это поможет вам обнаружить ошибки на ранних этапах цикла разработки.
  • Это поможет вам писать лучшие программы.
  • Он легко синхронизируется с другими методами и инструментами тестирования.
  • Там будет намного меньше ошибок
  • В будущем легче внести изменения с меньшими последствиями.

Часто задаваемые вопросы (FAQ)

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

PyUnit — это PythonВстроенная в систему модульная среда тестирования, доступная в виде модуля unittest. Это портированная версия... JUnit и поддерживает тестовые приспособления, тестовые примеры, наборы тестов и средство запуска тестов.

Создайте подкласс unittest.TestCase, напишите методы, начинающиеся с test_, и используйте в них утверждения, например, assertEqual. Запустите файл с помощью unittest.main(), чтобы выполнить все тесты.

Метод setUp() выполняется перед каждым тестовым методом для подготовки фикстур, а метод tearDown() — после каждого теста для очистки ресурсов. Вместе они обеспечивают независимость и воспроизводимость тестов.

Заглушки предоставляют фиксированные данные, от которых зависит тест, в то время как моки — это фиктивные объекты, для которых выполняется проверка. И те, и другие заменяют реальные зависимости, поэтому модульное тестирование проводится изолированно.

Искусственный интеллект, такой как GitHub Copilot, генерирует тестовые примеры для модульных тестов на основе функции, предлагает граничные случаи и утверждения, а также создает моки для зависимостей по мере написания кода.

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

модульный тест PythonPyTest использует встроенную структуру с классами и методами assert, в то время как pyTest — это сторонняя библиотека с более простыми операторами assert и мощными фикстурами. Обе запускают модульные тесты.

Подведем итог этой публикации следующим образом: