Модуль unittest — это встроенный инструмент Python для написания и запуска тестов. Он помогает убедиться, что код работает так, как задумано, и не ломается при изменениях. В этом тренажере ты научишься создавать тестовые классы, писать тестовые методы, использовать различные assert-методы для проверки условий, а также настраивать окружение с помощью setUp и tearDown. Тестирование — это не просто "проверка на ошибки", это способ документировать ожидаемое поведение кода и защитить его от регрессий в будущем. Здесь ты попрактикуешься в написании тестов с нуля, исправлении ошибок в тестовом коде, определении результатов выполнения тестов и правильной организации тестовых сценариев.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль unittest.
- Написание тестов.
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Сопоставьте assert-методы с их назначением
В unittest есть множество методов для проверки различных условий. Сопоставьте названия методов слева с их описанием справа.
assertRaisesassertNotEqualassertEqualassertInassertTrueКакой будет результат теста?
Проанализируйте тестовый метод и определите, каким будет результат его выполнения: пройдёт тест или упадёт с ошибкой.
import unittest
class TestList(unittest.TestCase):
def test_membership(self):
fruits = ['apple', 'banana', 'cherry']
self.assertIn('mango', fruits)
if __name__ == '__main__':
unittest.main()Исправьте ошибку в тестовом классе
В этом тестовом коде есть ошибка, из-за которой тестовый метод не будет обнаружен и запущен фреймворком unittest. Найдите и исправьте проблемную строку.
import unittest class TestString(unittest.TestCase): def check_upper(self): self.assertEqual('hello'.upper(), 'HELLO')Соберите тест с использованием setUp
Метод setUp вызывается перед каждым тестовым методом и используется для подготовки тестового окружения. Заполните пропуски, используя токены из банка, чтобы создать тест со списком, который инициализируется в setUp.
import unittest
class TestNumbers(unittest.TestCase):
def input1S(self):
input2S.numbers = [1, 2, 3, 4, 5]
def test_sum(self):
result = sum(input3S.numbers)
self.assertEqual(result, input4S)Порядок выполнения методов в тестовом классе
При запуске тестов методы выполняются в определённом порядке. Расставьте строки вывода в том порядке, в котором они появятся в консоли при запуске этого теста.
Классифицируйте assert-методы по типу проверки
В unittest есть разные группы assert-методов. Распределите методы по категориям: проверка равенства, проверка булевых значений и проверка исключений.
assertRaisesassertEqualassertTrueassertNotEqualassertFalseassertRaisesRegexСколько тестов будет выполнено?
Посмотрите на тестовый класс и определите, сколько тестовых методов будет обнаружено и выполнено фреймворком unittest.
import unittest
class TestCalculator(unittest.TestCase):
def setUp(self):
self.calc_value = 100
def helper_method(self):
return self.calc_value * 2
def test_addition(self):
self.assertEqual(5 + 5, 10)
def test_subtraction(self):
self.assertEqual(10 - 3, 7)
def check_multiplication(self):
self.assertEqual(3 * 3, 9)
def test_division(self):
self.assertEqual(10 / 2, 5)
def tearDown(self):
passСоберите тест на проверку исключения
Соберите тестовый метод, который проверяет, что при делении на ноль возникает исключение ZeroDivisionError. Используйте конструкцию with и метод assertRaises.
def test_zero_division(self): with self.assertRaises(ZeroDivisionError): result = 10 / 0 with self.assertRaises(ValueError): result = 10 / 0def check_zero_division(self):Что выведет unittest.main()?
Проанализируйте тестовый класс с двумя тестами. Один тест проходит, другой — падает. Какой итоговый вывод покажет unittest?
import unittest
class TestSimple(unittest.TestCase):
def test_pass(self):
self.assertEqual(1 + 1, 2)
def test_fail(self):
self.assertEqual(1 + 1, 3)
# Запуск: python -m unittestТест с использованием assertAlmostEqual
При работе с числами с плавающей точкой прямое сравнение может давать неожиданные результаты. Заполните пропуски, чтобы создать тест, проверяющий результат деления с допустимой погрешностью.
import unittest
class TestFloat(unittest.TestCase):
def test_division(self):
result = 10 / 3
# Проверяем, что результат примерно равен 3.333... с точностью до 2 знаков
self.input1S(result, input2S, places=input3S)Исправьте тест с декоратором skip
Иногда нужно временно пропустить тест. В этом коде используется декоратор для пропуска теста, но допущена ошибка. Найдите и исправьте её.
import unittest class TestFeature(unittest.TestCase): @unittest.skipTest("Not implemented yet") def test_new_feature(self): self.assertTrue(False)Соберите полный тестовый модуль
Соберите полноценный тестовый файл с импортом, тестовым классом, setUp-методом, тестовым методом и блоком запуска. Расположите строки в правильном порядке.
class TestStack(unittest.TestCase):import unittest def test_push(self): self.stack.append(10) self.assertEqual(len(self.stack), 1) def setUp(self): self.stack = []if __name__ == '__main__': unittest.main()from collections import deque def setUp():Результат теста со списком
Проанализируйте тест, который проверяет работу со списком. Ответьте: пройдёт тест или нет? Введите OK если пройдёт, или FAIL если упадёт.
import unittest
class TestListOps(unittest.TestCase):
def test_sort(self):
data = [3, 1, 4, 1, 5]
data.sort()
self.assertListEqual(data, [1, 1, 3, 4, 5])Тест с несколькими assert-проверками
В одном тестовом методе несколько проверок. Первая проверка падает. Что произойдёт с остальными проверками?
import unittest
class TestMultiple(unittest.TestCase):
def test_sequence(self):
self.assertEqual(1, 2) # Первая проверка
self.assertEqual(3, 3) # Вторая проверка
self.assertEqual(5, 5) # Третья проверка
print("All passed!")