Claude Architect · Pelajaran

Penjanaan Test dan Piawaian

Dokumentasikan lekapan dan piawaian untuk menambah baik test yang dijana

Pelajaran 4 daripada 413 langkah

Penjanaan Test dan Piawaian ialah pelajaran Claude Architect percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Claude Architect, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Claude Architect merangkumi sejumlah 4 pelajaran.

Mengapa Ujian Dijana Menyimpang

Jika anda meminta Claude Code untuk "write tests for this module" tanpa panduan, anda akan mendapat ujian yang berjalan tetapi tidak sepadan dengan gaya dalaman anda: pembantu rangka kerja yang salah, lekapan yang direka-reka, serta penegasan yang meniru pelaksanaan dan bukannya kontrak.

Penyelesaiannya bukan gesaan sekali guna yang lebih baik. Penyelesaiannya ialah piawaian berterusan dan dikongsi yang dibaca oleh model pada setiap larian. Pelajaran ini menunjukkan cara mendokumentasikan lekapan dan konvensyen supaya ujian yang dijana menjadi idiomatik, deterministik dan mudah disemak, sama ada dalam sesi interaktif mahupun CI.

Piawaian Tinggal dalam CLAUDE.md Berskop Projek

Konvensyen ujian hendaklah berada dalam konfigurasi peringkat projek supaya setiap penyumbang dan setiap pelaksana CI dapat melihatnya. Letakkannya dalam ./CLAUDE.md atau .claude/CLAUDE.md, yang dikongsi melalui VCS.

JANGAN bergantung pada ~/.claude/CLAUDE.md peringkat pengguna: fail itu bersifat peribadi dan TIDAK dikongsi melalui kawalan versi, jadi rakan sepasukan baharu dan pipeline anda tidak akan memilikinya. Apa-apa yang diperlukan oleh penjanaan ujian mesti berada dalam skop projek.

# ./CLAUDE.md  (committed -> every dev + CI sees it)

## Testing standards
- Framework: pytest; one test file per module as tests/test_<module>.py
- Name tests test_<behavior>_<condition>_<expected>
- Assert on the public contract, never on private internals
- No network or real time in unit tests; use the provided fixtures

Modulkan dengan Import @path

CLAUDE.md yang monolitik menjadi sukar dibaca dan menghabiskan konteks. Pindahkan panduan terperinci pengujian ke dalam failnya sendiri dan import fail itu menggunakan sintaks @path. Dengan ini, fail akar kekal ringkas sambil piawaian masih dimuatkan.

Fail yang diimport hanyalah markdown, dikawal versinya seperti segala yang lain, maka piawaian itu boleh diguna semula dan mudah disemak secara berasingan.

# ./CLAUDE.md
@./standards/testing-style.md
@./standards/fixtures.md

# Each imported file documents one slice of the standard,
# keeping the root CLAUDE.md short and scannable.

Muatkan Peraturan Ujian Hanya Apabila Diperlukan

Lebih baik daripada import yang sentiasa aktif: letakkan konvensyen ujian dalam fail .claude/rules/ dengan frontmatter YAML paths. Peraturan itu dimuatkan hanya apabila mengedit fail yang sepadan, jadi konteks dan token dapat dijimatkan berbanding CLAUDE.md monolitik yang menghantar segala-galanya pada setiap giliran.

Hadkan skop peraturan kepada direktori ujian anda dan peraturan itu akan diaktifkan tepat apabila Claude menjana atau mengedit ujian, serta tidak mengganggu pada masa lain.

# .claude/rules/testing.md
---
paths:
  - "tests/**"
  - "**/*.test.ts"
---
# Loaded only when a matching test file is in play
- Arrange-Act-Assert, one logical assertion per test
- Reuse fixtures from conftest.py; never hand-roll a DB
- Cover the happy path, one edge case, and one failure case

Dokumentasikan Lekapan sebagai Sumber Kebenaran

Punca terbesar ujian yang dijana dengan buruk ialah lekapan yang direka-reka: model mencipta objek pengguna atau stub pangkalan data, bukannya menggunakan yang anda miliki. Dokumentasikan lekapan sebenar supaya Claude menggunakannya semula.

Nyatakan dengan jelas perkara yang disediakan oleh setiap lekapan, bentuknya dan masa penggunaannya. Anggap ini seperti penerangan alat: tujuan, nilai pulangan, format input dan sempadan kebolehgunaan menentukan pemilihan yang betul.

# ./standards/fixtures.md  (imported into CLAUDE.md)

## Available pytest fixtures (use these, do NOT invent)
- `db`        -> in-memory SQLite session, auto-rolled-back per test
- `client`    -> FastAPI TestClient with auth middleware disabled
- `user`      -> a persisted User(id=1, role="member"); returns the ORM obj
- `frozen_now`-> pins datetime.utcnow() to 2026-01-01T00:00:00Z

# Need a different state? Parametrize an existing fixture; don't create a new DB.

Contoh Few-Shot Mengatasi Peraturan Kabur

Prosa semata-mata meninggalkan kekaburan. Tambahkan 2 hingga 4 contoh yang disasarkan bagi ujian piawai dan model akan membuat generalisasi terhadap pola tersebut, bukannya sekadar menyalinnya. Contoh few-shot ialah pemacu paling kuat untuk konsistensi, kes pinggiran dan format output.

Tunjukkan satu ujian lengkap dan idiomatik yang menggunakan lekapan sebenar anda. Ujian baharu akan meniru struktur, penamaan dan gaya penegasannya.

# ./standards/testing-style.md  (a canonical example to generalize from)

def test_transfer_rejects_when_balance_too_low(db, user):
    account = make_account(db, owner=user, balance=50)
    with pytest.raises(InsufficientFunds):
        transfer(db, account, amount=100)
    assert account.balance == 50          # state unchanged on failure
# ^ Note: AAA layout, real `db`/`user` fixtures, asserts the contract.

Tulis Kriteria Jelas, Bukan Hasrat Kabur

"Write good tests" ialah hasrat yang kabur. Kriteria jelas menghasilkan output yang boleh dipercayai. Bandingkan "be thorough" dengan "cover the happy path, one boundary value, and one error path; never test private methods directly."

Peraturan yang konkrit dan boleh diperiksa menghapuskan teka-teki yang menyebabkan ujian yang dijana tidak konsisten antara fail dan penyumbang.

# In CLAUDE.md or the generation prompt -- explicit and checkable:
- Each public function gets: 1 happy-path, 1 edge/boundary, 1 failure test
- A test may fail for exactly ONE reason; split otherwise
- Mock ONLY at process boundaries (network, clock, filesystem)
- Forbidden: sleeping on real time, hitting a live service, asserting log text

Rumususkan Penjanaan sebagai Kemahiran

Jadikan aliran kerja boleh diulang dengan kemahiran .claude/skills/ (skop projek dikongsi melalui VCS; skop pengguna bersifat peribadi). Kemahiran itu menggabungkan piawaian anda dan boleh mengehadkan alat serta mengasingkan output.

Gunakan context: fork untuk mengasingkan output penjanaan yang panjang, allowed-tools untuk mengehadkan perkara yang boleh disentuhnya, dan argument-hint untuk membimbing pemanggil. Kini "generate tests to standard" menjadi satu arahan yang boleh diguna semula dan bukannya perenggan yang ditaip semula.

# .claude/skills/gen-tests/SKILL.md
---
name: gen-tests
description: Generate tests for a module using project fixtures + style
context: fork
allowed-tools: [Read, Glob, Grep, Write]
argument-hint: <path/to/module.py>
---
Follow @./standards/testing-style.md and @./standards/fixtures.md.
Find siblings with Glob **/*test*, reuse existing fixtures, then Write the test file.

Cari Pola Sebelum Menjana

Jangan menjana dalam ruang kosong. Minta Claude mengikuti pola penyiasatan berperingkat terlebih dahulu: Glob untuk mencari fail ujian sedia ada, Read beberapa fail, Grep untuk melihat cara sesuatu lekapan digunakan, kemudian tulis ujian baharu yang sepadan dengan perkara yang telah wujud.

Mendasarkan penjanaan pada pangkalan kod sebenar lebih baik daripada mengulang panduan gaya, kerana model menyalin konvensyen yang hidup dan berfungsi, bukannya meneka.

# Glob to discover the established test layout
claude -p "Glob tests/**/*.py, Read two existing tests, \
Grep for usages of the `client` fixture, then write tests/test_orders.py \
following the same fixtures and naming. Do not invent new fixtures."

Jana Tanpa Antara Muka, Semak dengan Sesi Baharu dalam CI

Dalam pipeline, jana ujian tanpa antara muka dengan -p (diperlukan kerana tiada manusia hadir) dan --output-format json supaya langkah seterusnya dapat menghuraikan hasilnya. Kemudian semak ujian yang dijana dalam sesi berasingan dan terpencil.

Semakan dengan contoh baharu mengatasi semakan kendiri dalam sesi yang sama: pengarang mengekalkan penaakulannya sendiri dan tidak akan mencabar ujiannya sendiri. Penyemak yang bersih dapat mengesan penegasan tautologi dan kes kegagalan yang tiada, yang terlepas pandang oleh penjana.

# 1) Generate (headless, parseable)
claude -p "$(cat .ci/gen-tests-prompt.md)" --output-format json > gen.json

# 2) Review in a FRESH session, not the generation context
claude -p "Review the new tests in gen.json against ./standards/testing-style.md. \
Flag tautological asserts and any missing failure-path test." \
  --output-format json > review.json

Sahkan Struktur, Kemudian Cuba Semula dengan Maklum Balas

Apabila anda meminta ujian sebagai output berstruktur (tool_use + Skema JSON), sahkan hasilnya. Jika hasil itu tidak sah, gunakan cuba semula dengan maklum balas: hantar semula permintaan asal, output yang salah dan ralat pengesahan yang tepat. Kaedah ini boleh membetulkan kesilapan format dan struktur dengan boleh dipercayai.

Dua peringatan daripada helaian fakta: cuba semula TIDAK membantu apabila maklumat yang diperlukan sememangnya tiada dalam sumber, dan anda hendaklah menandakan medan skema sebagai required hanya jika medan itu sentiasa wujud, jika tidak model akan mereka-reka nilainya.

# Schema for emitted test cases -- 'edge_case' is optional, so NOT required
{
  "type": "object",
  "properties": {
    "test_name":   {"type": "string"},
    "fixtures":    {"type": "array", "items": {"type": "string"}},
    "assertion":   {"type": "string"},
    "edge_case":   {"type": "string"}
  },
  "required": ["test_name", "fixtures", "assertion"]
}
# On a validation failure: resend original + bad output + the exact error.

Semakan Pantas

Terapkan pelajaran ini pada keputusan piawaian yang realistik.

Imbas Kembali: Penjanaan Ujian & Piawaian

Perkara utama:

  • Letakkan piawaian pengujian dalam skop projek (./CLAUDE.md, .claude/rules/ dengan paths), dikongsi melalui VCS; jangan sesekali bergantung pada ~/.claude/CLAUDE.md peribadi dalam CI.
  • Modulkan dengan import @path; peraturan dengan frontmatter paths hanya dimuatkan apabila mengedit fail yang sepadan, sekali gus menjimatkan konteks.
  • Dokumentasikan lekapan sebagai sumber kebenaran (tujuan, bentuk, masa penggunaan) supaya model menggunakannya semula dan bukannya mencipta stub.
  • Few-shot (2-4 contoh piawai) bersama kriteria jelas mengatasi arahan kabur; model membuat generalisasi terhadap pola tersebut.
  • Bungkus semuanya dalam kemahiran .claude/skills/; minta Claude menyiasat ujian sedia ada (Glob/Read/Grep) sebelum menulis.
  • Dalam CI, jana tanpa antara muka dengan -p --output-format json, kemudian semak dalam sesi baharu yang terpencil.
  • Sahkan output berstruktur; cuba semula dengan maklum balas membetulkan ralat format tetapi bukan maklumat yang tiada, dan wajibkan medan skema hanya jika medan itu sentiasa wujud.
Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
26
Pelajaran
104

Soalan Lazim

Adakah pelajaran “Penjanaan Test dan Piawaian” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Claude Architect, termasuk “Penjanaan Test dan Piawaian”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Claude Architect merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Penjanaan Test dan Piawaian”?

Dokumentasikan lekapan dan piawaian untuk menambah baik test yang dijana Anda berlatih Claude Architect menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Claude Architect?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Claude Architect di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Penjanaan Test dan Piawaian” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Claude Architect ini?

Ya. Setiap pelajaran Claude Architect menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mod Tanpa Interaksi
  2. Output Berstruktur
  3. Pengasingan Sesi untuk Semakan
  4. Penjanaan Test dan Piawaian
← Kembali ke Claude Architect