🏠 Домашнее задание 1: Unit-тесты для SimpleMath

⚡ Суть задания

Написать pytest-тесты для класса SimpleMath (методы square и cube). Протестировать положительные числа, отрицательные и ноль. Ответ — ссылка на репозиторий git.

# simple_math.py (уже дан)
class SimpleMath:
    def square(self, x): return x * x
    def cube(self, x): return x * x * x

Текст задания из LMS

Auto QA: Домашнее задание 1

Создайте файл simple_math.py и напишите в нём следующий класс:

# simple_math.py
class SimpleMath:
    """Класс с простыми математическими операциями."""

    def square(self, x):
        """Возвращает квадрат числа."""
        return x * x

    def cube(self, x):
        """Возвращает куб числа."""
        return x * x * x
  1. Цель: написать unit-тесты для класса SimpleMath.
  2. Инструкция:
    • Создайте файл test_simple_math.py.
    • Напишите в нём тесты для методов square и cube.
    • Проверьте корректность работы методов для разных входных значений (положительных, отрицательных и нуля).
  3. Пример ожидаемого поведения:
    • Метод square(2) должен возвращать 4.
    • Метод cube(-3) должен возвращать -27.
  4. В качестве ответа приложить ссылку на репозиторий в git.

Подготовка окружения

Шаг 1: Создание проекта и виртуального окружения

# PowerShell — создайте папку для проекта
mkdir homework_01
cd homework_01

# Создайте виртуальное окружение
python -m venv venv

# Активируйте окружение (PowerShell)
.\venv\Scripts\Activate.ps1

# Если PowerShell запрещает скрипты — выполните один раз:
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# Установите pytest
pip install pytest

# Проверьте версию
pytest --version

Шаг 2: Инициализация git-репозитория

# Инициализация
git init

# Создайте .gitignore
# .gitignore
venv/
__pycache__/
*.pyc
.pytest_cache/

Шаг 3: Структура файлов

homework_01/
├── venv/
├── simple_math.py          # Тестируемый класс (дан в задании)
├── test_simple_math.py     # Ваши тесты
├── pytest.ini              # Конфигурация (необязательно)
└── .gitignore

Пошаговое решение

Шаг 1: Создайте файл simple_math.py

Это файл, данный в условии задания — копируйте как есть.

# simple_math.py
class SimpleMath:
    """Класс с простыми математическими операциями."""

    def square(self, x):
        """Возвращает квадрат числа."""
        return x * x

    def cube(self, x):
        """Возвращает куб числа."""
        return x * x * x

Шаг 2: Создайте файл test_simple_math.py

Логика: нужно покрыть тремя группами значений — положительные числа, отрицательные числа и ноль.

# test_simple_math.py
import pytest
from simple_math import SimpleMath


@pytest.fixture
def math():
    """Фикстура — создаёт экземпляр SimpleMath для каждого теста."""
    return SimpleMath()


# =============================================
# Тесты метода square(x) — возвращает x * x
# =============================================

def test_square_positive(math):
    """Квадрат положительного числа."""
    assert math.square(2) == 4

def test_square_positive_large(math):
    """Квадрат большего положительного числа."""
    assert math.square(5) == 25

def test_square_negative(math):
    """Квадрат отрицательного числа — результат положительный."""
    assert math.square(-3) == 9

def test_square_zero(math):
    """Квадрат нуля равен нулю."""
    assert math.square(0) == 0

def test_square_one(math):
    """Квадрат единицы равен единице."""
    assert math.square(1) == 1


# =============================================
# Тесты метода cube(x) — возвращает x * x * x
# =============================================

def test_cube_positive(math):
    """Куб положительного числа."""
    assert math.cube(2) == 8

def test_cube_positive_large(math):
    """Куб числа 3 равен 27."""
    assert math.cube(3) == 27

def test_cube_negative(math):
    """Куб отрицательного числа — результат отрицательный."""
    assert math.cube(-3) == -27

def test_cube_zero(math):
    """Куб нуля равен нулю."""
    assert math.cube(0) == 0

def test_cube_one(math):
    """Куб единицы равен единице."""
    assert math.cube(1) == 1

Шаг 3: Запустите тесты

# В папке homework_01, при активном venv:
pytest -v

# Ожидаемый вывод:
# ========================= test session starts ==========================
# collected 10 items
#
# test_simple_math.py::test_square_positive PASSED                [ 10%]
# test_simple_math.py::test_square_positive_large PASSED          [ 20%]
# test_simple_math.py::test_square_negative PASSED                [ 30%]
# test_simple_math.py::test_square_zero PASSED                    [ 40%]
# test_simple_math.py::test_square_one PASSED                     [ 50%]
# test_simple_math.py::test_cube_positive PASSED                  [ 60%]
# test_simple_math.py::test_cube_positive_large PASSED            [ 70%]
# test_simple_math.py::test_cube_negative PASSED                  [ 80%]
# test_simple_math.py::test_cube_zero PASSED                      [ 90%]
# test_simple_math.py::test_cube_one PASSED                       [100%]
#
# ========================== 10 passed in 0.05s ==========================

Проверка в VS Code

Запуск тестов в терминале VS Code

  1. Откройте папку homework_01 в VS Code: File → Open Folder.
  2. Откройте встроенный терминал: Ctrl + ` (backtick).
  3. Убедитесь, что выбран интерпретатор Python из venv. В правом нижнем углу VS Code — нажмите на Python и выберите ./venv/Scripts/python.exe.
  4. Запустите тесты: pytest -v.

Настройка Test Explorer (GUI)

  1. Откройте палитру команд: Ctrl + Shift + PPython: Configure Tests.
  2. Выберите pytest.
  3. Выберите директорию проекта (homework_01).
  4. В боковой панели появится иконка колбы — Test Explorer. Там можно запускать тесты кнопкой Run.

Отладка с F5 и точки останова

  1. Создайте файл .vscode/launch.json в папке проекта:
// .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "pytest: текущий файл",
            "type": "debugpy",
            "request": "launch",
            "module": "pytest",
            "args": [
                "${file}",
                "-v"
            ],
            "console": "integratedTerminal",
            "justMyCode": true
        }
    ]
}
  1. Откройте test_simple_math.py.
  2. Кликните слева от строки кода для установки точки останова (красный кружок).
  3. Нажмите F5 — pytest запустится с отладчиком.
  4. При достижении точки останова выполнение приостановится — можно изучить переменные в панели Variables.

Публикация в git

# Добавьте файлы в git
git add simple_math.py test_simple_math.py .gitignore

# Создайте первый коммит
git commit -m "feat: add SimpleMath class and pytest tests"

# Создайте репозиторий на GitHub (например через gh CLI):
# gh repo create homework-01-unit-tests --public --source=. --push

# Или через веб-интерфейс GitHub:
# 1. github.com → New repository → название: homework-01-unit-tests
# 2. git remote add origin https://github.com/<your-username>/homework-01-unit-tests.git
# 3. git push -u origin main

Связь с разделами урока

← К оглавлению урока