Платформа Unittest Python, мощный инструмент тестирования
Платформа Unittest Python, мощный инструмент тестирования

1 Предисловие

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

Модульное тестирование — важная часть разработки программного обеспечения. Это процесс проверки и проверки наименьшего тестируемого модуля программного обеспечения. Значение единицы при модульном тестировании обычно необходимо определять на основе реальной ситуации. Например, в языке C единица относится к функции, в Java единица относится к классу, в графическом программном обеспечении она может относиться к окну. или меню и т. д. В общем, модуль — это наименьший искусственно заданный тестируемый функциональный модуль.

Будучи мощным инструментом модульного тестирования Python, фреймворк unittest играет важную роль в тестировании программного обеспечения. Его основные преимущества в основном отражаются в следующих аспектах:

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

2 Основные концепции

  • Тестовый пример

Экземпляр TestCase — это тестовый пример, который является базовой единицей в среде unittest. Методы тестовых примеров должны начинаться с test, чтобы платформа unittest могла распознавать и выполнять эти методы.

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

существоватьтестовый примерсередина,Метод утверждения является ключом к определению того, соответствует ли поведение тестируемого объекта ожидаемому. Например,Можно использоватьassertEqual()утверждениедва значениядаравны или нет,assertTrue()утверждениеодин Верно ли выражение,assertFalse()утверждениеодин Является ли выражение ложным и т. д.。нравитьсяфруктыутверждениенеудача,Тестовая среда выдаст одно исключение,показыватьтестовый пример не удался.

  • Тестовый набор

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

Наборы тестов можно создавать несколькими способами. Например,Можно использоватьunittest.TestSuite()Создать экземпляродинобъект набора тестов,тогда пройдиaddTest()Методы добавляются один за другимтестовый пример。также Можно использоватьunittest.makeSuite()метод,Пакетное создание тестов на основе одного класса тестов пример и добавлен в набор тестов.

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

  • Тестовый бегун

Средство запуска тестов используется для выполнения тестов. пример Инструменты, возвращающие результаты выполнения. Его можно использовать с наборами тестов для выполнения всех задач в наборе тестов. пример,и сохраните результаты теста вTextTestResultПримерсередина。

unittest.TextTestRunner()даодин Часто используемые средства запуска тестов,Он предоставляет несколько способов запуска тестового примера. Для управления детальностью отображения результатов теста можно установить различные параметры.,НапримерverbosityПараметры могут быть установлены на 0、1 или 2, что соответствует беззвучному режиму, режиму по умолчанию и подробному режиму соответственно.

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

  • Тестовое приспособление

Тестовые приспособления играют жизненно важную роль в модульном тестировании. Он в основном отвечает за обеспечение стабильной и согласованной тестовой среды для тестовых случаев, включая настройку среды (setUp) и разрушение (tearDown).

setUpиtearDownметод Можетсуществовать Вступают в силу разные уровни。например,на уровне метода,setUp(self)встречасуществоватькаждый тестметод Автоматически выполнять перед выполнением,используется для Подготовьте тестовые данныеисреда;tearDown(self)носуществоватькаждый тестметод Автоматически выполнять после выполнения,Используется для очистки тестовых данных и среды. Например, при тестировании операций с базой данных,setUpСоединение с базой данных может быть установлено,Подготовьте тестовые данные,иtearDownСоединение с базой данных можно закрыть,Чистые данные, полученные во время тестирования. на уровне класса,@classmethodдекоративныйsetUpClass(cls)существоватькаждый тестдобрыйвнутри,Выполнить один раз,существовать Все варианты использованиябегать Выполнить раньше;tearDownClass(cls)такой жесуществоватькаждый тестдобрыйвнутри,Выполнить один раз,Выполняется после выполнения всех вариантов использования. Это полезно для операций, требующих инициализации и очистки на уровне класса.,Например, создание и уничтожение экземпляров сложных объектов. на уровне модуля,setUpModule()существовать每个модульвнутри,Выполнить один раз,существовать Все варианты использованиябегать Выполнить раньше;tearDownModule()существовать每个модульвнутри,Выполнить один раз,Выполняется после выполнения всех вариантов использования. Может использоваться для некоторых глобальных операций инициализации и очистки.,Например, инициализация системы журналов и т. д.

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

3 Написание и реализация вариантов использования

3.1 Написание тестовых примеров

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

1. Модуль импорта

Сначала вам нужно импортировать модуль unittest и модуль, который будет тестироваться. Например,Если вы хотите протестироватьодинназванныйmy_moduleмодуль,Можно использовать следующий импорт кода:

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

2. Создайте тестовый класс

Создать тестовый класс,Этот класс наследуется отunittest.TestCase。тестдобрый Имя должно быть способно яснопоказывать它所тестмодульили Функция。Например:

Язык кода:python
кодКоличество запусков:0
копировать
class MyTest(unittest.TestCase):
    ...

3. Определить методы тестирования

В тестовом классе Определение методов тестирования。тестметод Имя должно заканчиваться наtest_В начале вот так unittest Платформа может распознавать их как методы тестирования. Например:

Язык кода:python
кодКоличество запусков:0
копировать
def test_functionality(self):
    result = add(2, 3)
    self.assertEqual(result, 5)

def test_functionality(self):определенныйодинтестметод。существоватьэтотметодсередина,Может написать специальную тестовую логику,Содержит протестированные функции и методы.,Используйте методы утверждения, чтобы убедиться, что результаты соответствуют ожиданиям. Например, тестируемая функция — add,Можно использоватьresult = add(2, 3)тестметод,Затемиспользоватьутверждениеметодself.assertEqual(result, 5)Приходитьпроверять结фруктыда Нет 5。

4. Вызовите основной метод для запуска тестового примера.

Внизу тестового модуля,Можно использоватьunittest.main()метод Приходитьбегатьвсетестовый пример,этотметодвстреча自动发现и执行所有кtest_началотестметод。Например:

Язык кода:python
кодКоличество запусков:0
копировать
if __name__ == '__main__':
    unittest.main()

3.2 Метод выполнения варианта использования

1. Автоматически обнаруживать и выполнять тестовые примеры.

unittest Обеспечивает автоматическое обнаружение тестового Механизм пример. По умолчанию,它встречасуществовать Найдите в текущем каталогеtestначало Python документ,и сделай этосерединакtest_началометодидентифицирован кактестовый пример。

Вы можете указать конкретный каталог через параметры командной строки для тестового файла. примеравтоматическое обнаружение。Например,использоватьpython -m unittest discover -s /path/to/directoryЗаказ Можетсуществовать Искать в указанном каталогетестовый пример и выполнить.

2. Выполнить указанный вариант использования

Укажите тестовый модуль: вы можете указать тестовый модуль, который будет выполняться, с помощью параметров командной строки. Например,бегатьpython -m unittest test_moduleЗаказ,Все тестовые примеры в модуле с именем test_module будут выполнены.

Укажите класс теста: вы можете дополнительно указать класс теста, который будет выполняться. Например,бегатьpython -m unittest test_module.TestClassЗаказ,будет выполненtest_moduleмодульсерединаизTestClassдобрыйсерединаиз所有тестовый пример。

Укажите метод тестирования. Вы также можете указать конкретный метод тестирования, который необходимо выполнить. Например,бегатьpython -m unittest test_module.TestClass.test_methodЗаказ,будет выполненtest_moduleмодульсерединаизTestClassдобрыйсерединаизtest_methodметод。

Укажите пути к файлам: вместо использования имен модулей и классов,Вы также можете напрямую указать путь к тестовому файлу для выполнения в нем тестового примера. Например,бегатьpython -m unittest /path/to/test_file.pyЗаказ,Весь тестовый пример в указанном файле будет выполнен.

4 Пример отображения

4.1 Классы для тестирования

Ниже приведен пример простого класса для тестирования.

Язык кода:python
кодКоличество запусков:0
копировать
class Calculator:
    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

    def multiply(self, a, b):
        return a * b

    def divide(self, a, b):
        if b == 0:
            raise ValueError("Делитель не может быть равен нулю")
        return a / b

Этот классCalculator包含了四个基本из数学Операцияметод:добавление、Вычитание、Умножение и деление.

4.2 Тестовые случаи

Используется следующее unittest пара кадровCalculatorкласс для тестированиятестовый пример。

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

class TestCalculator(unittest.TestCase):
    def setUp(self):
        self.calculator = Calculator()

    def test_add(self):
        result = self.calculator.add(5, 3)
        self.assertEqual(result, 8)

    def test_subtract(self):
        result = self.calculator.subtract(8, 3)
        self.assertEqual(result, 5)

    def test_multiply(self):
        result = self.calculator.multiply(4, 3)
        self.assertEqual(result, 12)

    def test_divide(self):
        result = self.calculator.divide(10, 2)
        self.assertEqual(result, 5)

        with self.assertRaises(ValueError):
            self.calculator.divide(10, 0)

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

В этом тесте примерсередина,Создано первымодинTestCalculatorдобрый,он наследует отunittest.TestCase。существоватьsetUpметодсередина,СозданныйодинCalculatorПример,для использования в каждом методе испытаний.

test_addметодтест了добавление Операция,вызовCalculatorдобрыйизaddметодииспользоватьутверждениеself.assertEqualПриходитьпроверять结фруктыда Нет预期值;test_subtractметодтест Вычитание Операция,Та же причинаиспользоватьутверждениепроверять结фрукты;test_multiplyметодтестумножение Операция;test_divideметодтест除法Операция,Разделено на две ситуации: проверка правильности результата при нормальных обстоятельствах, когда делитель равен нулю;,использоватьself.assertRaisesПриходитьпроверятьда Нет брошенных ValueError аномальный.

4.3 Подробное объяснение

1. Структура тестового примера

каждый тестметод都кtest_начало,этотда unittest Требования к платформе, чтобы платформа могла автоматически распознавать и выполнять эти методы.

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

2. Использование утверждений

self.assertEqualиспользуется дляпроверятьдва значениядаравны или нет。существоватьдобавление、Вычитание、умножениеи除法из正常тестсередина,Используйте это утверждение, чтобы проверить правильность результата вычисления.

self.assertRaisesиспользуется дляпроверятьда Нет брошенных特定изаномальный.существовать除法тестсередина,когда делитель равен нулю,Должно быть выброшено исключение ValueError.,Используйте это утверждение, чтобы проверить такое поведение.

3. Функция метода setUp

setUpметодсуществоватькаждый тестметод执行之前都встреча被вызов,Используется для настройки тестовой среды. В этом примере,СозданныйодинCalculatorПример,Чтобы этот экземпляр можно было использовать для тестирования в каждом методе тестирования.

4.4 Особое внимание

1. Независимость методов испытаний

Каждый метод испытаний должен быть независимым,Не следует полагаться на порядок выполнения и результаты других методов тестирования. Это гарантирует, что даже в случае сбоя определенного метода тестирования,Другие методы тестирования по-прежнему могут выполняться нормально.,И легко обнаружить проблемы.

2. Тестирование обработки исключений

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

3. Полнота тестовых случаев

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

4. Читабельность тест-кейсов

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

5 написано в конце

unittest кадр в Python играет важную роль в проекте. Он хорошо повышает качество кода. Предоставляя богатые методы утверждения и строгие процессы тестирования, он может быстро обнаруживать потенциальные проблемы в коде и обеспечивать его корректность и стабильность. Что касается управления тестированием, unittest Фреймворки предоставляют несколько способов организации и выполнения тестов. пример. Набор тестов может объединять несколько тестов. примерили Тестовые классы централизованы и выполняются для облегчения управления большим количеством тестов. пример。в то же время,Программа запуска тестов может создавать подробные отчеты о тестировании.,Помогите разработчикам быстро понять результаты тестов,Проблема с позиционированием. также,Тестирование функциональности прошивки в рамках,нравитьсяsetUpиtearDownметод,Делает более удобным настройку и уничтожение тестовой среды.,提高了тестиз可重复性и Ремонтопригодность。unittest кадр как Python Встроенная среда модульного тестирования имеет широкий спектр возможностей применения. В процессе непрерывной интеграции и непрерывного развертывания (CI/CD) unittest Платформу можно использовать в сочетании с другими инструментами для реализации автоматического тестирования, гарантируя, что каждая отправка кода может быть полностью протестирована, а проблемы могут быть обнаружены и устранены своевременно. В больших проектах unittest Фреймворки могут помочь разработчикам лучше управлять тестовыми примерами и поддерживать их, повышать эффективность разработки и качество кода. Кроме того, юниттест Фреймворк также обладает хорошей масштабируемостью. Разработчики могут настраивать тестовые сценарии и наборы тестов в соответствии с потребностями проекта для реализации более сложных сценариев тестирования. В то же время эту платформу также можно использовать в сочетании с другими инструментами и платформами тестирования, чтобы использовать их соответствующие преимущества и совместно повышать эффективность и качество тестирования программного обеспечения.

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

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