[Test Killer] Модуль Unittest на Python: от начального уровня до расширенного использования
[Test Killer] Модуль Unittest на Python: от начального уровня до расширенного использования

✨Основы модуля unittest

Модуль unittest — это встроенная среда тестирования Python. Он предоставляет инструменты тестирования и средства запуска тестов, которые помогают нам создавать тестовые примеры и запускать их. Основное использование модуля unittest — создание тестовых примеров, написание тестовых методов и запуск тестовых примеров.

Вот пример написания тестового примера с использованием модуля unittest:

Язык кода:javascript
копировать
import unittest

class TeststringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # Проверка s.split сама по себе не меняет s
        self.assertEqual(s, 'hello world')

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

В этом примере мы определяем тестовый пример с именем TespythontringMethods и определяем в нем три тестовых метода: test_upper(), test_isupper() и test_split(). Эти методы тестирования используются для проверки правильности строковых методов. Например, метод test_upper() проверяет, может ли метод Upper() преобразовать строку в прописные буквы, и проверяет, соответствует ли это нашим ожиданиям.

✨ Запуск тестовых случаев

После написания тестовых примеров нам необходимо запустить их, чтобы убедиться в корректности кода. Модуль unittest предоставляет несколько методов для запуска тестовых случаев. Самый распространенный метод — использование функции unittest.main(). Мы можем добавить следующий код в конце кода:

Язык кода:javascript
копировать
import unittest
if __name__ == '__main__':
    unittest.main()

Это запустит все методы тестирования и выведет результаты тестирования.

Существуют и другие способы запуска тестовых случаев, например использование классов unittest.TextTestRunner() и unittest.TestLoader(). Например, мы можем использовать TextTestRunner для запуска тестовых случаев:

Язык кода:javascript
копировать
import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # Проверка s.split сама по себе не меняет s
        self.assertEqual(s, 'hello world')

if __name__ == '__main__':
    # Создать набор тестов
    suite = unittest.TestSuite()
    # Добавить вариант использования теста в набор тестов
    suite.addTest(TestStringMethods('test_upper'))
    suite.addTest(TestStringMethods('test_isupper'))
    suite.addTest(TestStringMethods('test_split'))
    # Запустите набор тестов с помощью TextTestRunner
    runner = unittest.TextTestRunner()
    runner.run(suite)

Это создаст набор тестов и добавит в него три метода тестирования. Затем мы используем TextTestRunner для запуска набора тестов и вывода результатов теста.

утверждение

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

•assertEqual(a, b): проверяет, равны ли a и b •assertNotEqual(a, b): проверяет, не равны ли a и b •assertTrue(x): проверяет, является ли x истинным •assertFalse(x): проверяет, является ли x имеет значение False•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

В предыдущем примере,Мы используем много разных типов утверждений. Например,В методе test_upper(),Мы использовали утверждение AssertEqual(), чтобы проверить, равен ли 'foo'.upper() 'FOO'.

✨Расширенное использование:

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

1. методы setUp() и TearDown()

Методы setUp() и TearDown() — два часто используемых метода в модуле unittest. Методы setUp() и TearDown() автоматически запускаются до и после выполнения каждого тестового метода. Метод setUp() используется для инициализации тестового состояния, а метод TearDown() используется для очистки тестового состояния. Например, мы можем создать тестовый файл с помощью метода setUp() и удалить файл с помощью метода TearDown().

Язык кода:javascript
копировать
import unittest
import tempfile
import os

class TestFileMethods(unittest.TestCase):

    def setUp(self):
        self.test_file = tempfile.NamedTemporaryFile(delete=False)

    def tearDown(self):
        os.remove(self.test_file.name)

    def test_write_file(self):
        with open(self.test_file.name, 'w') as f:
            f.write('hello world')
        with open(self.test_file.name, 'r') as f:
            content = f.read()
        self.assertEqual(content, 'hello world')

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

В этом примере мы создаем тестовый пример с именем TestFileMethods и определяем в нем тестовый метод test_write_file(). В методе setUp() мы создаем временный файл и удаляем файл в методе TearDown(). Метод test_write_file() проверяет, можно ли записать «hello world» в файл, и проверяет, соответствует ли содержимое файла ожидаемому.

2. Декоратор (Декоратор — это уникальный синтаксический сахар Python, если вы не понимаете, перейдите в Baidu)

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

Язык кода:javascript
копировать
import unittest
def test_subtract(self):
    self.assertEqual(1 - 2, -1)

@unittest.expectedFailure
def test_divide(self):
    self.assertEqual(1 / 0, 0)

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

В этом примере мы определяем три метода тестирования. Методы test_add() и test_subtract() являются обычными методами тестирования. Ожидается, что метод test_divide() завершится неудачей, поскольку мы пытаемся разделить 1 на 0. Мы помечаем метод test_divide() декоратором @unittest.expectedFailure, чтобы сообщить модулю unittest ожидать сбоя метода тестирования.

3. Пропустить тестирование

Иногда, при определенных условиях, мы можем захотеть пропустить определенные тесты. Для этого модуль unittest предоставляет декоратор @unittest.skip.

Язык кода:javascript
копировать
import unittest

class TestMathMethods(unittest.TestCase):

    def test_add(self):
        self.assertEqual(1 + 2, 3)

    @unittest.skip('skip subtract test')
    def test_subtract(self):
        self.assertEqual(1 - 2, -1)

    def test_multiply(self):
        self.assertEqual(2 * 3, 6)

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

В этом примере мы определяем три метода тестирования. Оба метода test_add() и test_multiply() являются обычными методами тестирования. Метод test_subtract() помечен как пропущенный, поскольку мы использовали декоратор @unittest.skip('skip subtract test').

в заключение

Модуль unittest — очень полезная среда тестирования на Python.,Он предоставляет мощный набор инструментов для написания и запуска тестов. в этой статье,Мы представили базовое использование модуля unittest.,Включает в себя, как писать тестовые сценарии использования, методы и утверждения. Мы также рассмотрим некоторые расширенные варианты использования,Включает методы setUp() и TearDown(), Декоратор и Skiptest. Надеюсь, эта статья поможет вам лучше понять модуль unittest.,И напишите лучший код Pythontest.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода