Создание и тестирование инструмента

Разработка программного обеспечения с Claude Code

Dani Zysman

AI Curriculum Manager @ DataCamp

От плана к коду

recraft: half: Разработчик за столом пишет код CLI-инструмента, на экране терминала вывод argparse

  • Наша спецификация из урока 4.1:
    • --artist — имя исполнителя для запроса
    • --format — формат вывода: JSON или CSV
    • --output — путь к файлу с результатами
  • Claude сгенерирует:
    • разбор аргументов через argparse
    • запрос к базе данных через MCP
    • логику записи в файл
Разработка программного обеспечения с Claude Code

Шаблоны аргументов CLI

Шаблон Пример Когда использовать
Обязательный --artist "AC/DC" Нужно указывать всегда
Необязательный --format json Есть значение по умолчанию
Флаг --verbose Булево вкл/выкл
Позиционный reporter.py data.csv Основной ввод
  • Лучшие практики:
    • Добавляйте описания --help для каждого аргумента
    • Используйте значения по умолчанию, чтобы сократить число обязательных параметров
    • Проверяйте данные сразу и сообщайте об ошибках понятно
Разработка программного обеспечения с Claude Code

Создание инструмента Reporter

> Use @PLAN.md to build reporter.py
Готово! Файл reporter.py создан на основе PLAN.md

Основные функции:
- get_db_connection()     Подключение к SQLite только для чтения, с проверкой
- fetch_artist_stats()    4 SQL-запроса для агрегатов
- format_json/csv()       Форматирование вывода
- write_output()          Запись в файл
- parse_args() / main()   Оркестрация CLI

Функциональность:
- Поиск исполнителя без учёта регистра
- Разбивка по альбомам с указанием выручки
- Все сообщения об ошибках согласно спецификации
- Флаг --db для внедрения тестовой базы
Разработка программного обеспечения с Claude Code

Сгенерированный код

import argparse, sqlite3, json, csv

def main():
    parser = argparse.ArgumentParser()
    ...
    args = parser.parse_args()

    conn = sqlite3.connect("chinook.db")
    # Query artist's albums and tracks...

    if args.format == "json":
        with open(args.output, "w") as f:
            json.dump(data, f, indent=2)
Разработка программного обеспечения с Claude Code

Тестирование инструмента

flowchart: reporter.py, pytest, Проверка результата

  • Тесты проверяют:
    • Корректный исполнитель возвращает данные
    • Файл результата создаётся
    • Формат JSON/CSV верен
Разработка программного обеспечения с Claude Code

Тестирование CLI-инструментов

  • Модульные тесты
    • Проверяют отдельные функции
    • Используют заглушки для базы данных
    • Быстрые, изолированные, повторяемые
  • Интеграционные тесты
    • Запускают реальную команду CLI
    • Используют настоящую базу данных
    • Медленнее, но реалистичнее
  • Что тестировать:
    • Основной сценарий — корректный исполнитель, верный вывод
    • Ошибки — исполнитель не найден, неверный формат
    • Граничные случаи — пустое имя, спецсимволы
    • Работа с файлами — права доступа, перезапись
Разработка программного обеспечения с Claude Code

Тестирование на практике

> Use @PLAN.md to build test_reporter.py
Создан файл test_reporter.py: 31 тест в 7 классах

Покрытие:
- Connection     Валидная БД, отсутствующий файл, некорректный файл
- Stats          Известный/неизвестный исполнитель, без учёта регистра, несколько жанров
- JSON           Формат, отступы, сериализация туда-обратно
- CSV            Два раздела, жанры через «|», количество строк
- File I/O       Запись, перезапись, недоступный путь
- CLI args       Обязательные аргументы, проверка допустимых значений
- Integration    Вывод JSON/CSV, исполнитель/БД не найдены, очистка

Использует минимальную тестовую SQLite БД: независимо от chinook.db

Все 31 тест пройден!
Разработка программного обеспечения с Claude Code

Давайте потренируемся!

Разработка программного обеспечения с Claude Code

Preparing Video For Download...