Workflow Phát Triển

Viết Code Sạch Hơn với TDD Được Claude Hỗ Trợ

Red, green, refactor, với AI viết các bài test

Claude Code đặc biệt giỏi về TDD, bạn mô tả hành vi bạn muốn, nó viết trước bài test sẽ fail, rồi triển khai code để làm nó pass. Điều này đảo ngược điểm đau truyền thống của TDD: viết test không còn là phần chậm nữa. Bạn tập trung vào việc chỉ định hành vi bằng ngôn ngữ thông thường, và Claude Code xử lý phần lặp lại của việc thiết lập test, assertion, và mocking. Kết quả là độ phủ test cao hơn, code được thiết kế tốt hơn, và phát triển nhanh hơn.

Phát triển hướng kiểm thử với Claude Code theo chu kỳ red-green-refactor: bạn mô tả hành vi bạn muốn, để Claude viết một bài test sẽ fail, rồi yêu cầu nó triển khai code để pass. Claude Code xử lý toàn bộ chu kỳ một cách tự động khi được cung cấp đặc tả rõ ràng.

Chu Kỳ

Chu kỳ TDD với Claude Code

R
Red, viết một bài test sẽ fail

Mô tả hành vi bạn muốn triển khai: "Người dùng nên có thể đặt lại mật khẩu qua email. Endpoint nên xác thực email tồn tại, tạo một token có thời hạn, và gửi liên kết đặt lại." Claude Code viết bài test trước, khẳng định phản hồi HTTP mong đợi, việc tạo token, và việc gửi email, trước khi có bất kỳ phần triển khai nào tồn tại. Nó chạy bài test để xác nhận rằng nó fail vì đúng lý do (thiếu hàm, không phải lỗi cú pháp).

G
Green, triển khai code tối thiểu

Claude Code sau đó viết phần triển khai đơn giản nhất làm bài test pass. Nó không thiết kế thừa, nó viết đủ code vừa đủ để thỏa mãn các assertion của bài test. Sự tự giác này là nơi TDD tỏa sáng: bài test định nghĩa hợp đồng, và phần triển khai thực hiện nó. Claude Code chạy bộ test sau khi viết phần triển khai để xác minh bài test mới pass và không có bài test hiện có nào bị hỏng.

R
Refactor, cải tiến mà không thay đổi hành vi

Với các bài test pass đóng vai trò lưới an toàn, bạn yêu cầu Claude Code dọn dẹp phần triển khai: trích xuất hàm hỗ trợ, cải thiện tên biến, giảm trùng lặp, hoặc tối ưu hiệu năng. Sau mỗi bước refactor, Claude Code chạy lại các bài test. Nếu một bài test fail, việc refactor đã đưa vào một thay đổi hành vi, và Claude Code sẽ hoàn tác hoặc điều chỉnh nó. Giai đoạn này tạo ra code sạch, dễ bảo trì, được hỗ trợ bởi các bài test toàn diện.

Hướng Dẫn Từng Bước

Viết tính năng hướng kiểm thử đầu tiên của bạn

Bước 1: Mô tả hành vi, không phải cách triển khai

Bắt đầu bằng cách cho Claude Code biết tính năng nên làm gì từ góc nhìn của người dùng. Thay vì "tạo một hàm tên calculateDiscount nhận vào một giá và một phần trăm," hãy nói "khách hàng có membership premium nên được giảm 20% trên tổng đơn hàng của họ, nhưng mức giảm giá không bao giờ vượt quá 50 đô la." Mô tả theo hành vi này tạo ra các bài test tốt hơn vì các bài test kiểm tra quy tắc nghiệp vụ, không phải chi tiết triển khai.

Bước 2: Xem lại bài test được tạo

Claude Code viết một tệp test với nhiều trường hợp: đường dẫn thuận lợi (người dùng premium, giảm giá hợp lệ), các trường hợp biên (giảm giá vượt mức trần 50 đô la, đơn hàng giá bằng không), và các trường hợp lỗi (người dùng không premium, giá âm). Xem lại các bài test này trước khi cho Claude Code triển khai tính năng. Các trường hợp test định nghĩa đặc tả của bạn; nếu thiếu một trường hợp, hãy thêm nó ngay. Thêm một trường hợp test rẻ hơn rất nhiều so với việc phát hiện ra một trường hợp biên bị thiếu ở production.

Bước 3: Để Claude Code triển khai và lặp lại

Khi bạn đã phê duyệt các bài test, hãy yêu cầu Claude Code triển khai tính năng. Nó viết code, chạy các bài test, và cho bạn xem kết quả. Nếu tất cả các bài test pass ngay lần đầu, bạn có thể chuyển sang refactor. Nếu một số bài test fail, Claude Code đọc kết quả thất bại và điều chỉnh phần triển khai. Chu kỳ này thường hoàn thành trong một hoặc hai lần lặp, nhanh hơn rất nhiều so với vòng lặp thủ công viết-chạy-debug.

Tại Sao Nó Hiệu Quả

Tại sao Claude Code làm cho TDD dễ hơn

Nó loại bỏ sự cản trở của việc viết test

Lý do số một khiến các developer bỏ qua TDD là việc viết test cảm thấy chậm và tẻ nhạt, đặc biệt là code thiết lập, mocking, và các assertion lặp lại. Claude Code loại bỏ hoàn toàn sự cản trở này. Bạn mô tả điều gì nên xảy ra trong một câu, và Claude Code tạo ra tệp test hoàn chỉnh với các import đúng, fixture, mock, và độ phủ các trường hợp biên. Gánh nặng nhận thức chuyển từ "làm sao để tôi mock dependency này" sang "hành vi nào mới quan trọng."

Nó bắt được các trường hợp biên mà bạn sẽ bỏ lỡ

Khi Claude Code viết test từ một mô tả hành vi, nó tạo ra các trường hợp biên mà các developer thường quên: đầu vào rỗng, các giá trị biên, truy cập đồng thời, xử lý null, và các chuyển đổi trạng thái không hợp lệ. Nó làm được điều này vì nó đã thấy hàng triệu bộ test và biết trường hợp biên nào thường gây ra lỗi. Bạn có được độ phủ test kỹ càng hơn mà không phải tự nghĩ ra từng trường hợp.

Nó giữ bạn trong sự tự giác của TDD

TDD khó duy trì vì sự cám dỗ bỏ qua bài test và viết code trực tiếp luôn tồn tại. Với Claude Code, viết test trước thực sự nhanh hơn viết triển khai trước, vì vậy không có động lực để bỏ qua nó. Chu kỳ Red-Green-Refactor trở nên tự nhiên vì Claude Code áp dụng từng bước: nó viết bài test, chạy để xác nhận thất bại, triển khai code, và chạy lại bài test để xác nhận thành công.

Hỗ Trợ Framework

Các framework kiểm thử mà Claude Code hỗ trợ

Jest & Vitest (JavaScript/TypeScript)

Claude Code viết các bài test Jest và Vitest với mocking đúng cách, xử lý bất đồng bộ, snapshot testing, và tích hợp React Testing Library. Nó tạo ra các block describe/it đọc giống như đặc tả và sử dụng beforeEach/afterEach để cách ly test một cách sạch sẽ.

pytest (Python)

Hỗ trợ đầy đủ pytest bao gồm fixture, parametrize, mark, conftest.py, và các plugin như pytest-asyncio, pytest-django, và pytest-mock. Claude Code viết các bài test sử dụng dependency injection thông qua fixture và theo mẫu Arrange-Act-Assert.

Test Go & Rust

Claude Code viết các bài test Go table-driven theo đúng phong cách với wrapping lỗi đúng cách và subtest, và các hàm Rust #[test] với xử lý Result đúng cách, setup/teardown, và tích hợp proptest cho kiểm thử dựa trên tính chất.

End-to-end với Playwright

Đối với TDD full-stack, Claude Code viết các bài test Playwright thực thi toàn bộ ứng dụng của bạn từ trình duyệt. Nó xử lý điều hướng trang, tương tác với form, assertion API, và hồi quy hình ảnh, cho phép bạn mô tả user story trong khi nó tạo ra các script test tự động.

Câu Hỏi Thường Gặp

TDD với Claude Code, các câu hỏi thường gặp

Tôi có thể dùng TDD của Claude Code trên các project đã có sẵn không?

Chắc chắn rồi. Claude Code đọc cơ sở hạ tầng kiểm thử hiện có, framework kiểm thử, fixture, mock, factory, và quy ước của bạn, và viết các bài test mới phù hợp một cách tự nhiên với bộ test hiện có của bạn. Nếu project của bạn dùng pytest với fixture conftest.py, Claude Code tạo ra các bài test sử dụng những fixture đó. Nếu project React của bạn dùng Testing Library với các công cụ render tùy chỉnh, Claude Code theo mẫu đó. Bạn không cần bắt đầu lại từ đầu.

Tôi nên hướng đến mục tiêu độ phủ nào?

Tỷ lệ phần trăm độ phủ ít quan trọng hơn chất lượng độ phủ. Claude Code giúp bạn tập trung vào độ phủ hành vi hơn là độ phủ dòng code. Khi bạn mô tả tính năng theo những gì nó nên làm (không phải cách nó làm), các bài test được tạo ra tự nhiên bao phủ các luồng quan trọng. Dù vậy, Claude Code có thể phân tích báo cáo độ phủ hiện có của bạn và xác định các nhánh chưa được kiểm thử, rồi viết các bài test có mục tiêu để lấp đầy khoảng trống. Hãy hướng đến độ phủ kỹ càng cho logic nghiệp vụ và xử lý lỗi, không phải 100% độ phủ dòng code.

Claude Code có thể viết test tích hợp không?

Có. Claude Code viết các bài test tích hợp thực thi nhiều component cùng nhau, các endpoint API chạm vào một database test thật, các component React tương tác với các phản hồi API được mock, hoặc các lớp service điều phối nhiều dependency. Nó xử lý việc thiết lập và dỡ bỏ database test, fixture test, và cấu hình mock server. Đối với test tích hợp API, nó tạo ra các bài test xác minh toàn bộ chu kỳ request-response bao gồm xác thực, kiểm tra đầu vào, và phản hồi lỗi.

Giai đoạn refactor hoạt động như thế nào?

Sau Green (các bài test pass với phần triển khai hoạt động), bạn vào giai đoạn Refactor. Yêu cầu Claude Code cải thiện phần triển khai, trích xuất hàm, giảm trùng lặp, cải thiện cách đặt tên, hoặc tối ưu hiệu năng. Claude Code thực hiện các thay đổi và chạy lại bộ test sau mỗi bước refactor. Nếu một bài test fail, điều đó có nghĩa là việc refactor đã thay đổi hành vi, và Claude Code sẽ sửa lại việc refactor hoặc đánh dấu thay đổi hành vi để bạn xem lại. Các bài test đóng vai trò lưới an toàn suốt quá trình này.

Workflow TDD tốt nhất với AI là gì?

Mô tả hành vi tính năng bằng ngôn ngữ tự nhiên, để Claude Code viết bài test sẽ fail (Red), sau đó yêu cầu nó triển khai code để làm bài test pass (Green), và cuối cùng yêu cầu refactor (Refactor). Chu kỳ Red-Green-Refactor này với Claude Code nhanh hơn TDD thủ công vì Claude viết cả bài test và phần triển khai trong khi bạn tập trung vào việc định nghĩa yêu cầu.

Claude Code có tự động chạy test trong quá trình TDD không?

Có. Claude Code chạy bộ test của bạn sau khi viết mỗi bài test và sau mỗi thay đổi triển khai. Nó đọc kết quả test, xác định các thất bại, và lặp lại cho đến khi các bài test pass. Bạn cũng có thể thiết lập hook để chạy linter và type checker tự động sau mỗi lần sửa tệp, tạo ra một cổng chất lượng được tự động hóa hoàn toàn.

Học TDD với Claude Code

Đừng chỉ đọc về nó nữa. Hãy xây dựng điều gì đó.

Nightschool AI là một nền tảng học tập độc lập và không liên kết, không được Anthropic chứng thực hoặc tài trợ. Claude là nhãn hiệu của Anthropic, PBC. Bạn đang tìm Claude Academy chính thức của Anthropic? Truy cập academy.claude.com.