2045c856e9
- Add 10 core testing guides (setup, AAA principles, PHPUnit/Pest, mocking, anti-patterns, PHP 8.4+, debugging, data factories, advanced edge cases) - Add 13 component testing guides covering all Laravel layers - Add standard templates for PHPUnit 10/11 and Pest v2/v3 including ArchitectureTest - Add Docker smart test runner, dependency installer, and CI/CD templates (GitHub Actions, GitLab CI) - Add 4 Claude Code skills (laravel-test-setup, laravel-unit-test with --all mode, laravel-test-review, laravel-mock-helper) - Add single unified installer script (sg-install-unit-testing.sh) with global support, CLI runners, and 1-click updater (sg-test-update) - Add comprehensive documentation (README.md, USAGE-GUIDE.md) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
42 lines
2.8 KiB
Markdown
42 lines
2.8 KiB
Markdown
# Checklist Tự Thẩm Định Chất Lượng Unit Test (Verification Checklist)
|
|
|
|
Trước khi xuất bất kỳ file test nào cho người dùng, Agent **BẮT BUỘC** phải tự đối chiếu mã nguồn của mình qua 10 câu hỏi kiểm định nghiêm ngặt dưới đây:
|
|
|
|
---
|
|
|
|
### [ ] 1. Tính Đơn Vị (Is it really a Unit Test?)
|
|
- Test có đang vô tình gọi Database thật hoặc gọi router HTTP không?
|
|
- Các dependency nặng (API, Queue, Mail, Storage, Repository) đã được Mock hoặc Fake 100% chưa?
|
|
|
|
### [ ] 2. Cấu Trúc AAA Rõ Ràng (Is AAA clearly structured?)
|
|
- Các khối `// Arrange`, `// Act`, `// Assert` có được phân định rõ ràng bằng comment không?
|
|
- Khối `// Act` có đúng là chỉ thực hiện 1 hành động duy nhất không?
|
|
|
|
### [ ] 3. Mock Expectations Đầy Đủ (Are mock calls strictly verified?)
|
|
- Mọi mock method có được khai báo số lần gọi cụ thể (`->once()`, `->never()`, `->times(N)`) thay vì bỏ trống không?
|
|
- Các tham số truyền vào hàm mock có được kiểm tra qua `->with(...)` hoặc `->withArgs(...)` không?
|
|
|
|
### [ ] 4. Không Over-Mock DTO/Value Object (Are value objects kept real?)
|
|
- Các đối tượng DTO, Value Object, Collection có được tạo bằng instance thật thay vì mock không?
|
|
|
|
### [ ] 5. Độ Phủ Ngoại Lệ & Kịch Bản Biên (Are edge cases & exceptions covered?)
|
|
- Đã có test case cho trường hợp ném ngoại lệ (Exception) chưa?
|
|
- Đã kiểm tra các trường hợp biên: `null`, mảng rỗng `[]`, số `0`, số âm chưa?
|
|
|
|
### [ ] 6. Assertions Chặt Chẽ & Có Nghĩa (Are assertions meaningful?)
|
|
- Có sử dụng Strict Assertion (`assertSame`, `toBe`) thay vì loose assertion không?
|
|
- Có bị dính assertion rỗng kiểu `$this->assertTrue(true)` không?
|
|
|
|
### [ ] 7. Đặt Tên Chuẩn & Dễ Đọc (Are method names expressive?)
|
|
- Tên test method có thể hiện rõ "Hành động + Kết quả + Ngữ cảnh" không? (Ví dụ: `it_throws_exception_when_balance_is_insufficient`)
|
|
|
|
### [ ] 8. Cú Pháp Đúng Phiên Bản Framework (Is syntax version-accurate?)
|
|
- Nếu là PHPUnit 10+: Đã dùng Attribute `#[Test]` và `#[DataProvider]` thay cho DocBlock cũ chưa?
|
|
- Nếu là Pest: Đã dùng đúng cú pháp `describe()`, `it()`, `expect()` chưa?
|
|
|
|
### [ ] 9. Import Đầy Đủ & Namespace Chính Xác (Are imports complete?)
|
|
- Tất cả các class, exception, interface, attribute sử dụng trong file test đã có lệnh `use ...` ở đầu file chưa? (Tránh lỗi `Class not found`).
|
|
|
|
### [ ] 10. Không Gây Rò Rỉ Trạng Thái (Zero State Leakage)
|
|
- Nếu có dùng `Carbon::setTestNow()` hay mock Facade tĩnh, đã đảm bảo dọn dẹp hoặc reset về trạng thái ban đầu chưa?
|