Начало работы с платформой модульного тестирования Python unittest
Начало работы с платформой модульного тестирования Python unittest

1. Обзор

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

Модульное тестирование — это метод тестирования программного обеспечения, при котором тестируется наименьшая тестируемая единица, обычно функция или метод.

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

Зачем нужно модульное тестирование

Модульное тестирование является важной частью разработки программного обеспечения и выполняет следующие функции:

  1. Проверьте правильность кода. Модульное тестирование может автоматически проверить правильность кода.,Это не позволяет разработчикам пропустить определенные ситуации или ошибки при тестировании вручную. Пройти модульные тесты,Ошибки в позиционировании можно обнаружить вовремя,И гарантировать качество и уровень дефектов.
  2. Лучшая организация и сопровождение кода: посредством модульного тестирования,код будет разбит на небольшие тестируемые блоки,Каждый модуль имеет соответствующие тестовые примеры,Лучший код организации,Повысьте читаемость и удобство сопровождения кода.
  3. Повышение эффективности разработки: быстрое выполнение модульных тестов и обратная связь.,Может помочь разработчикам быстро найти проблемы и быстро их решить. Это ускоряет итерацию,Повышение эффективности разработки программного обеспечения.
  4. Уверенность: прохождение модульных тестов,Разработчики могут с уверенностью модифицировать и реорганизовать существующие приложения.,Поскольку модульное тестирование может гарантировать качество и правильность,Уменьшите вероятность совершения ошибок.

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

Различные языки программирования имеют свои собственные среды модульного тестирования. К основным средам модульного тестирования в Python относятся:

  1. unittest: Собственная среда модульного тестирования Python представляет собой среду тестирования в стиле xUnit.
  2. pytest: Сторонняя среда модульного тестирования Python с лучшей масштабируемостью и гибкостью. pytest имеет характеристики лучшего отображения ожидаемых ошибок и упрощенного написания тестовых примеров.
  3. nose: Еще одна сторонняя среда модульного тестирования Python, имеющая подключаемую архитектуру плагинов, которая может легко расширить ее функциональность.
  4. doctest: Еще одна среда модульного тестирования, поставляемая с Python. Вы можете использовать строки документации для написания тестовых примеров в коде Python.
  5. Testify: Относительно новая среда модульного тестирования Python, ориентированная на обеспечение более высокой скорости и эффективности для классов и массовых тестовых случаев.

В этой статье основное внимание будет уделено гонорарам за тестирование, входящим в состав Python. unittest

два,unittestВведение в структуру

unittestфон рамкиипроизводить

unittest Является ли среда модульного тестирования Java JUnit изPythonВерсия。unittestПервоначально автор:Pythonизосновной разработчикTim Разработанный Питерсом в 2001 году, он призван предоставить стандартизированный способ написания модульных тестов для уменьшения задержек, вызванных традиционной отладкой из-за проб и ошибок.

Особенности и преимущества фреймворка unittest

Фреймворк unittest имеет следующие особенности и преимущества:

  • Стандартизированные инструменты тестирования: Платформа unittest предоставляет стандартизированные инструменты тестирования и средства запуска тестов, интегрированные из стандартного TestCase, обеспечивая удобный интерфейс для начинающих и опытных пользователей.
  • Поддержка автоматического тестирования: Вы можете повысить эффективность тестирования, сократить время тестирования и сократить объем ручного тестирования, написав автоматизированные тестовые примеры.
  • Поддержка настройки теста: Платформа unittest может легко интегрировать сторонние библиотеки и поддерживать создание настраиваемых тестовых примеров и наборов тестов.
  • Результаты выполнения очевидны: Платформа unittest предоставляет подробную информацию об ошибках, позволяя тестировщикам быстро находить и исправлять ошибки.

3. Основы фреймворка unittest

Установите и настройте фреймворк unittest.

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

unittest Простой пример

Тестируемая демонстрация кода содержит два метода: add и sub

Язык кода:python
кодКоличество запусков:0
копировать
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

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

def sub(a, b):
    return a - b

Напишите примеры модульного тестирования для этих двух функций.

Язык кода:python
кодКоличество запусков:0
копировать
import unittest
from calculate import add, sub

class TestCalcuate(unittest.TestCase):
    def test_add(self):
        result = add(2, 3)
        self.assertEqual(result, 5) 

    def test_sub(self):
        result = sub(5, 3)
        self.assertEqual(result, 2)

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

В этом тестовом примере,Мы импортировалиaddиsubфункция,и создал файл с именем TestCalcuate из Тестовый класс(всеиз Тестовый класс都必须даunittest.TestCase из Подкласс)。в этом классе,Мы определяем два метода тестированияtest_addиtest_sub,Используется для проверки поведения функций сложения и вычитания соответственно.

в каждом методе испытаний,Вызовем соответствующую функцию,и использоватьself.assertEqualметод условие, чтобы проверить, равен ли вычисленный результат ожидаемому значению.

наконец,мы используемunittest.main()запускать тестовые случаи。

Четыре、unittestрамка Часто используемые категории тестовиметод

Платформа модульного тестирования Python предоставляет множество классов и методов, помогающих создавать модульные тесты.

Часто используемые категории тестов

  1. unittest.TestCase:этотдаunittestрамкасамый важныйиз Тестовый класс,Все тестовые случаи должны наследовать от него. В нем представлены некоторые часто используемые методы утверждения и вспомогательные методы тестирования.,Используется для написания и запуска тестов.
  2. unittest.TestSuite:Этот класс используется для организациии Управление набором тестовых случаев。Вы можете добавить несколько тестовых случаев в набор тестов.,и запустить их все за один раз.
  3. unittest.TestLoader:Этот класс используется для загрузки тестовых случаев。это обеспечивает некоторыеметод,Тестовые случаи могут быть автоматически обнаружены и загружены из модулей, классов или каталогов.
  4. unittest.TextTestRunner:этот个добрый用于Запустить тестовый примери генерировать результаты испытанийизтекстовый отчет。это обеспечивает некоторыеметод,Вы можете контролировать формат вывода и уровень детализации теста.
  5. unittest.TestResult:Этот класс используется для хранения результатов тестов.。это обеспечивает некоторыеметод,Вы можете получить статус теста, информацию об ошибках, информацию о сбоях и т. д.

Часто используемые методы

В рамках unittest Часто используемые методывключатьsetUp()tearDown()setUpClass()иtearDownClass()。этот些методиспользуется в тестовых случаяхиз Подготовьтесь во время выполненияиочистка。

  1. setUp()метод:в каждом тестеметодперед бегомвызов。Он используется для подготовки тестовой среды.,Например, инициализируйте объект、Открытие файлов и т. д.。каждый тестметодбудет тамвызовsetUp()метод После выполнения。
  2. tearDown()метод:в каждом тестеметод После запускавызов。Он используется для очистки тестовой среды.,Например, закройте файл、Освободить ресурсы и т. д.。каждый тестметодбудет тамвызовtearDown()метод После выполнения。
  3. setUpClass()метод:在Тестовый класс中извсе测试методперед бегомвызов。он используется для одноразового выполненияиз Подготовка тестовой среды,Например, подключиться к базе данных、Запустить сервер и т. д.。setUpClass()методнуждатьсяиспользовать@classmethodДекоратор для маркировки。
  4. tearDownClass()метод:在Тестовый класс中извсе测试метод После запускавызов。он используется для одноразового выполненияизтестовая средаочистка,Например, отключиться от базы данных、Выключите сервер и т. д.。tearDownClass()методнуждатьсяиспользовать@classmethodДекоратор для маркировки。

Эти методы можно переопределить в тестовом классе и настроить по мере необходимости.

5. Напишите тестовые примеры

При написании тестовых случаев с использованием фреймворка unittest обычно необходимо выполнить следующие шаги:

  1. Создание тестовых случаев:
    • Создайте класс, который наследуется отunittest.TestCaseиз Тестовый класс。
    • 在Тестовый класс中定义一个或多个测试метод。каждый тестметоддолжно бытьtest_начало,Чтобы unittest мог автоматически распознавать и запускать их.
    • в каждом методе испытаний,Написать тестовую логикуи использоватьметод условие, чтобы убедиться, что результаты соответствуют ожиданиям.
  2. Управление тест-кейсами:
    • использоватьunittest.TestLoaderКласс для загрузки тестовых случаев。ты можешьиспользоватьloadTestsFromModule()метод Загрузить тестовые примеры из модуля,илииспользоватьloadTestsFromTestCase()метод从Тестовый класс中加载测试用例。
    • Создайтеunittest.TestSuiteобъект,и загрузитсяиз Добавьте тестовые примеры в набор тестов。ты можешьиспользоватьaddTest()метод Добавьте один тестовый пример,илииспользоватьaddTests()метод Добавить несколько тестовых случаев。
  3. Запустить тестовый пример:
    • использоватьunittest.TextTestRunnerдобрыйзапускать тестовые случаии генерировать результаты испытанийизтекстовый отчет。
    • Создайтеunittest.TextTestRunnerобъект。
    • вызовrun()метод Запустите набор тестов,и вывести результаты в консоль или файл.

В сочетании с предыдущим примером мы дополнительно продемонстрируем, как писать, управлять и запускать тестовые случаи:

Язык кода:python
кодКоличество запусков:0
копировать
import unittest

class MyTestCase(unittest.TestCase):
    def test_add(self):
        result = 2 + 2
        self.assertEqual(result, 4)

    def test_sub(self):
        result = 5 - 3
        self.assertEqual(result, 2)

if __name__ == '__main__':
    # Создайте набор тестов и добавьте тестовые примеры
    suite = unittest.TestSuite()
    suite.addTest(MyTestCase('test_add'))
    suite.addTest(MyTestCase('test_sub'))

    # Создайте средство запуска тестов и запустите набор тестов.
    runner = unittest.TextTestRunner()
    runner.run(suite)

В этом примере,Мы создали файл под названиемMyTestCaseиз Тестовый класс,и определил в нем два тестаметодtest_addиtest_sub。Затем,Мы создали набор тестов,и использоватьaddTest()метод将Добавьте тестовые примеры в набор тестов。наконец,Мы создали тест-раннер,и использоватьrun()метод Запустите набор тестов。

Запустите этот пример,Вы увидите результаты теста. Если все тесты пройдены,Вы увидите сообщение об успехе. Если какой-либо тест не пройден,Вы увидите сообщение об ошибке и подробную информацию об ошибке.

Это основные шаги по написанию, управлению и запуску тестовых примеров с использованием unittest. При необходимости вы можете написать больше тестовых методов и использовать различные утверждения методов для проверки поведения вашего кода.

шесть、unittestОбычно используетсяизметод утверждения

конечно! Ниже приведены наиболее часто используемые методы утверждения в unittest, представленные в таблице уценки:

метод утверждения

описывать

assertEqual(a, b)

Утверждаем, что aиb равны

assertNotEqual(a, b)

Утверждаем, что aиb не равно

assertTrue(x)

Утвердить, что x истинно

assertFalse(x)

Утвердить, что x является ложным

assertIs(a, b)

Утвердить, что aиb — один и тот же объект

assertIsNot(a, b)

Утвердить, что aиb — это не один и тот же объект

assertIsNone(x)

Утвердите, что x равен None

assertIsNotNone(x)

Утвердите, что x не равен None

assertIn(a, b)

утверждать, что a находится в b

assertNotIn(a, b)

Утверждать, что a не входит в b

assertIsInstance(a, b)

Утвердите, что a является экземпляром b

assertNotIsInstance(a, b)

Утвердите, что a не является экземпляром b

assertRaises(exception, callable, *args, **kwargs)

Утвердите, что вызов callable(*args, **kwargs) вызовет указанное исключение.

assertWarns(warning, callable, *args, **kwargs)

Утвердите, что вызов callable(*args, **kwargs) вызовет указанное предупреждение.

assertLogs(logger=None, level=None)

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

assertAlmostEqual(a, b, places=None, msg=None, delta=None)

Утверждают, что aиb примерно равны

assertNotAlmostEqual(a, b, places=None, msg=None, delta=None)

Утверждают, что aиb приблизительно не равны

assertSequenceEqual(a, b, msg=None, seq_type=None)

Утвердить, что aиb — одна и та же последовательность

assertListEqual(a, b, msg=None)

Утвердить, что aиb — один и тот же список

assertTupleEqual(a, b, msg=None)

Утверждаем, что aиb — идентичные кортежи.

assertSetEqual(a, b, msg=None)

Утвердить, что aиb — одно и то же множество.

assertDictEqual(a, b, msg=None)

Утверждать, что aиb — это одни и те же словари

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose