# В чем смысл юнит-тестов?

Смысл юнит-тестов в том, чтобы проверять **минимальные изолированные единицы кода** (обычно функции или методы класса) на корректность работы.

Основные цели:

1. **Ранняя проверка качества**\
   Ошибки ловятся сразу на этапе разработки, ещё до интеграции и сборки продукта.
2. **Документация поведения кода**\
   Юнит-тесты сами по себе описывают, как должна работать функция — это своего рода «живой пример использования».
3. **Поддержка рефакторинга**\
   Если код переписывается, тесты быстро покажут, что где-то нарушена логика. Это позволяет безопаснее вносить изменения.
4. **Локализация ошибок**\
   Так как юнит-тесты проверяют отдельные части кода изолированно (обычно с помощью mock-объектов), легче понять, где именно ошибка.
5. **Рост доверия к системе**\
   Когда большая часть бизнес-логики покрыта юнит-тестами, снижается вероятность, что «упадёт» что-то критичное при изменениях.
6. **Скорость обратной связи**\
   Юнит-тесты выполняются быстро (секунды), в отличие от UI-тестов.

Допустим, у нас есть функция для расчёта процентов по вкладу:

```python
# bank.py
def calculate_interest(amount, rate, years):
    if amount < 0 or rate < 0 or years < 0:
        raise ValueError("Параметры должны быть неотрицательными")
    return amount * (1 + rate / 100) ** years
```

Тесты на **pytest**:

```python
# test_bank.py
import pytest
from bank import calculate_interest

def test_simple_case():
    assert calculate_interest(1000, 10, 1) == 1100

def test_multiple_years():
    assert calculate_interest(1000, 10, 2) == pytest.approx(1210, rel=1e-3)

def test_zero_rate():
    assert calculate_interest(1000, 0, 5) == 1000

def test_invalid_input():
    with pytest.raises(ValueError):
        calculate_interest(-1000, 10, 1)
```

Запуск тестов:

```bash
pytest -v
```

Хочешь, я ещё покажу, как параметризовать тесты в `pytest`, чтобы не дублировать однотипные проверки?

Что проверяют тесты:

* корректность результата при разных входных данных,
* работу при нулевой ставке,
* обработку некорректных входных значений.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/teoriya-ruchnogo-testirovaniya/v-chem-smysl-yunit-testov.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
