AI Viết Unit Test Giúp Bạn: Dùng Claude Viết Unit Test Cho Dự Án Code Đầu Tay Trong 20 Phút

AI Viết Unit Test Giúp Bạn: Dùng Claude Viết Unit Test Cho Dự Án Code Đầu Tay Trong 20 Phút

🧪 Dùng Claude Viết Unit Test Cho Dự Án Code Đầu Tay Trong 20 Phút

Bạn vừa viết xong một hàm, một class cho dự án học lập trình đầu tiên, và muốn chắc chắn nó chạy đúng thay vì chỉ đoán. Với Claude (bản miễn phí), bạn có thể có một bộ unit test hoàn chỉnh cho file code của mình trong khoảng 20 phút, kể cả khi bạn chưa từng viết test trước đây. Bạn chỉ cần: file code đã viết, tài khoản Claude.ai, và Python cài sẵn trên máy.

Unit test là những đoạn code nhỏ, mỗi đoạn kiểm tra một phần nhỏ trong chương trình của bạn có hoạt động đúng hay không. Thay vì chạy thử chương trình bằng tay rồi nhìn kết quả, bạn để máy tự chạy hàng chục kiểm tra chỉ trong vài giây, mỗi khi bạn sửa code.

🧰 Chuẩn bị

  • Tài khoản Claude.ai (miễn phí, đăng ký bằng email tại claude.ai). ChatGPT bản miễn phí cũng dùng được cách làm tương tự.
  • File code Python bạn đã viết, ví dụ một hàm tính tổng giỏ hàng, một class quản lý danh sách việc cần làm, hoặc bài tập trên lớp.
  • Python đã cài trên máy, kèm thư viện kiểm tra pytest. Mở terminal, gõ:
    pip install pytest
    
  • Khoảng 20 phút không bị gián đoạn.

🪜 Làm từng bước

Bước 1: Dán nguyên file code và nói rõ bạn muốn test gì

Mở đoạn chat mới trên Claude, dán toàn bộ nội dung file code, kèm prompt sau:

Đây là file [tên file].py trong dự án Python của tôi:

[dán toàn bộ code vào đây]

Hãy viết bộ unit test bằng pytest cho file này. Yêu cầu:
- Test cả trường hợp bình thường và trường hợp biên (input rỗng, số âm, giá trị None)
- Mỗi hàm test đặt tên rõ nghĩa, nói rõ đang kiểm tra điều gì
- Thêm một dòng comment ngắn giải thích vì sao cần kiểm tra trường hợp đó
- Không được bịa ra hàm hoặc biến không có trong code tôi vừa gửi

Dòng cuối rất quan trọng: nếu không nhắc, AI đôi khi viết test cho một hàm tưởng tượng nghe có vẻ hợp lý nhưng không tồn tại trong code của bạn.

Bước 2: Lưu file test và chạy thử ngay

Copy phần code Claude trả về, lưu thành file test_[tên file].py trong cùng thư mục với file gốc. Mở terminal tại thư mục đó, chạy:

pytest test_[tên file].py -v

Cờ -v giúp bạn thấy từng test một, cái nào pass (có dấu tích), cái nào fail (có dòng lỗi màu đỏ).

Bước 3: Có test fail, hỏi AI để hiểu nguyên nhân thay vì tự sửa mù

Đừng vội sửa code khi chưa hiểu vì sao test fail. Dán nguyên văn lỗi pytest in ra, hỏi Claude:

Test [tên hàm test] bị fail với lỗi sau khi tôi chạy pytest:

[dán nguyên văn thông báo lỗi]

Lỗi này là do code tôi viết sai, hay do test viết chưa đúng với ý đồ ban đầu của tôi? Giải thích ngắn gọn, sau đó đề xuất cách sửa.

Có lúc lỗi nằm ở chính code của bạn (đúng việc test sinh ra để làm), có lúc lỗi nằm ở test (AI đoán sai cách hàm của bạn hoạt động). Hỏi rõ trước khi sửa giúp bạn thật sự hiểu bug, không chỉ vá cho hết lỗi.

Bước 4: Nhờ AI bổ sung test cho phần chưa được kiểm tra

Cài thêm công cụ đo độ bao phủ:

pip install pytest-cov

Chạy:

pytest --cov=[tên file] test_[tên file].py

Kết quả hiện phần trăm dòng code đã được test chạy qua. Dán báo cáo này cho Claude, nhờ viết thêm test riêng cho những dòng còn thiếu, ví dụ một nhánh if hiếm khi được gọi tới.

Bước 5: Tự đọc lại toàn bộ test trước khi coi là xong

Đọc từng hàm test một lượt, tự hỏi: "test này có đang kiểm tra đúng điều tôi mong muốn không, hay chỉ đang kiểm tra cho có". Sửa lại tên biến, giá trị đầu vào mẫu cho sát với dữ liệu thật trong dự án của bạn. Bước này không thể bỏ qua, vì chỉ bạn mới biết chương trình của mình nên hoạt động như thế nào.

✅ Kết quả mẫu

Với một hàm Python đơn giản như:

def tinh_tong_gio_hang(danh_sach_gia):
    return sum(danh_sach_gia)

Claude thường trả về bộ test dạng:

def test_tong_gio_hang_binh_thuong():
    # kiểm tra trường hợp có nhiều sản phẩm
    assert tinh_tong_gio_hang([10000, 20000, 5000]) == 35000

def test_gio_hang_rong():
    # kiểm tra khi giỏ hàng chưa có gì, không được lỗi
    assert tinh_tong_gio_hang([]) == 0

def test_gio_hang_co_gia_am():
    # phòng trường hợp dữ liệu nhập sai, giá âm do lỗi nhập liệu
    assert tinh_tong_gio_hang([10000, -5000]) == 5000

Chạy pytest -v, bạn sẽ thấy 3 dòng PASSED màu xanh nếu hàm viết đúng, hoặc dòng FAILED kèm lý do cụ thể nếu chưa.

💡 Mẹo để kết quả tốt hơn

  • Gửi từng file nhỏ một lượt, đừng dán cả dự án lớn cùng lúc. File càng ngắn, AI càng ít nhầm lẫn.
  • Trước khi để AI viết test, nhờ nó liệt kê trước các trường hợp cần kiểm tra ("liệt kê các trường hợp biên có thể xảy ra với hàm này"), rồi mới yêu cầu viết code. Bạn sẽ thấy ngay nếu AI bỏ sót điều gì quan trọng.
  • Luôn giữ câu "không được bịa hàm hoặc biến không có trong code tôi gửi" trong prompt, đây là cách hiệu quả nhất để tránh AI tưởng tượng ra API không tồn tại.
  • Nếu dự án dùng JavaScript thay vì Python, cách làm giống hệt, chỉ đổi yêu cầu sang thư viện Jest và chạy bằng npx jest.

⚠️ Giới hạn cần biết

  • Test do AI viết có thể bỏ sót quy tắc nghiệp vụ riêng của bạn, những điều chỉ có trong đầu bạn chứ không nằm trong code. Luôn đọc lại, đừng tin tuyệt đối.
  • Luôn chạy thử test thật trên máy trước khi tin vào kết quả. Một bộ test "nhìn có vẻ đúng" nhưng chưa chạy lần nào không có giá trị gì.
  • Claude bản miễn phí giới hạn số tin nhắn trong mỗi khung giờ. Nếu dự án nhiều file, bạn có thể cần nghỉ giữa chừng hoặc nâng cấp gói trả phí.
  • Với code ảnh hưởng tiền bạc, dữ liệu người dùng hay hệ thống đang chạy thật, luôn để một người có kinh nghiệm rà lại test trước khi dùng, AI không thay thế việc đó.

❓ Câu hỏi thường gặp

Tôi mới học lập trình, có cần biết viết test trước không? Không cần. Cách trên để bạn vừa học viết test vừa có code chạy được, đọc kỹ phần giải thích AI đưa ra chính là cách học.

Unit test khác gì với việc tôi tự chạy thử chương trình xem có lỗi không? Chạy thử tay chỉ kiểm tra một lần, một trường hợp. Unit test lưu lại hàng chục trường hợp, chạy lại tự động mỗi khi bạn sửa code, nên phát hiện lỗi mới gây ra sớm hơn nhiều.

Claude miễn phí có đủ dùng cho việc này không? Đủ cho một file code vài chục dòng mỗi lần, đúng với quy mô bài tập hoặc dự án đầu tay. Dự án lớn, nhiều file thì cần làm từng phần hoặc cân nhắc gói trả phí.

Nếu AI viết test sai thì sao? Luôn chạy bằng pytest để biết chắc, không đọc code rồi tin ngay. Nếu nghi ngờ một test, hỏi lại AI "test này đang kiểm tra cái gì" rồi tự so với mục đích thật của hàm.

Cách này có áp dụng được cho ngôn ngữ khác ngoài Python không? Có. Đổi yêu cầu trong prompt sang thư viện test của ngôn ngữ đó, ví dụ Jest cho JavaScript, JUnit cho Java, các bước còn lại giữ nguyên.

Viết test cùng AI không chỉ giúp bạn có code chạy đúng hơn, mà còn là cách học vibe coding tự nhiên nhất: để AI làm phần lặp đi lặp lại, còn bạn tập trung hiểu logic chương trình của mình. Nếu bạn hay gặp lỗi khi code, đọc thêm bài dùng AI đọc và sửa lỗi code cho người mới học lập trình. Muốn tự động hóa việc chạy test mỗi lần sửa file, công cụ Claude Code làm việc trực tiếp trong terminal sẽ tiện hơn chat trên web. Và nếu prompt bạn viết chưa ra kết quả như ý, bài prompt là gì, viết sao cho hiệu quả sẽ giúp bạn chỉnh lại cách đặt câu hỏi.

#AI #ClaudeAI #HocLapTrinh #UnitTest #Python #VibeAICoder

Doanh nghiệp muốn giới thiệu sản phẩm AI tới bạn đọc Vibe AI Coder? Xem gói tài trợ

Bài viết liên quan