Xây dựng và kiểm thử công cụ

Phát triển phần mềm với Claude Code

Dani Zysman

AI Curriculum Manager @ DataCamp

Từ kế hoạch đến mã

recraft: half: Lập trình viên ngồi bàn đang viết một công cụ CLI với terminal hiển thị đầu ra của argparse

  • Đặc tả từ Bài 4.1:
    • --artist — tên nghệ sĩ để truy vấn
    • --format — đầu ra JSON hoặc CSV
    • --output — đường dẫn tệp kết quả
  • Claude sẽ tạo:
    • Phân tích đối số bằng argparse
    • Truy vấn cơ sở dữ liệu qua MCP
    • Logic ghi tệp
Phát triển phần mềm với Claude Code

Các mẫu đối số CLI

Mẫu Ví dụ Khi dùng
Bắt buộc --artist "AC/DC" Phải cung cấp
Tùy chọn --format json Có giá trị mặc định hợp lý
Cờ --verbose Boolean bật/tắt
Vị trí reporter.py data.csv Đầu vào chính
  • Thực hành tốt:
    • Thêm mô tả --help cho mọi đối số
    • Dùng mặc định để giảm đầu vào bắt buộc
    • Xác thực sớm, báo lỗi rõ ràng, dừng nhanh
Phát triển phần mềm với Claude Code

Xây dựng Reporter

> Use @PLAN.md to build reporter.py
Done! Created reporter.py following PLAN.md

Core functions:
- get_db_connection()     Read-only SQLite with validation
- fetch_artist_stats()    4 SQL queries for aggregates
- format_json/csv()       Output formatting
- write_output()          File writing
- parse_args() / main()   CLI orchestration

Features:
- Case-insensitive artist lookup
- Per-album breakdown with revenue
- All error messages as specified
- --db flag for test injection
Phát triển phần mềm với Claude Code

Mã được tạo ra

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)
Phát triển phần mềm với Claude Code

Kiểm thử công cụ

flowchart: reporter.py, pytest, Xác minh đầu ra

  • Bài kiểm thử xác minh:
    • Nghệ sĩ hợp lệ trả về dữ liệu
    • Tạo được tệp đầu ra
    • Định dạng JSON/CSV đúng
Phát triển phần mềm với Claude Code

Kiểm thử công cụ CLI

  • Unit Test
    • Kiểm thử từng hàm riêng lẻ
    • Giả lập lời gọi cơ sở dữ liệu
    • Nhanh, độc lập, lặp lại được
  • Integration Test
    • Chạy lệnh CLI thực tế
    • Dùng cơ sở dữ liệu thật
    • Chậm hơn nhưng sát thực tế
  • Cần kiểm thử:
    • Happy path — nghệ sĩ hợp lệ, đầu ra đúng
    • Lỗi — không tìm thấy nghệ sĩ, định dạng sai
    • Biên — tên rỗng, ký tự đặc biệt
    • Xử lý tệp — quyền ghi, ghi đè
Phát triển phần mềm với Claude Code

Kiểm thử thực tế

> Use @PLAN.md to build test_reporter.py
Created test_reporter.py: 31 tests across 7 classes

Coverage:
- Connection     Valid DB, missing file, invalid file
- Stats          Known/unknown artist, case-insensitive, multi-genre
- JSON           Format, indentation, round-trip serialization
- CSV            Two sections, pipe-delimited genres, row counts
- File I/O       Write, overwrite, unwritable path
- CLI args       Required args, choices validation
- Integration    JSON/CSV output, artist/DB not found, cleanup

Uses minimal seeded SQLite DB: independent of chinook.db

All 31 tests passing!
Phát triển phần mềm với Claude Code

Cùng luyện tập nào!

Phát triển phần mềm với Claude Code

Preparing Video For Download...