Menu

Your Tests Pass, But Do They Actually Test Anything? A Practical Guide to Mutation Testing with mutmut and StrykerJS
📰

Your Tests Pass, But Do They Actually Test Anything? A Practical Guide to Mutation Testing with mutmut and StrykerJS

DEV Community: python·EME GUG·about 24 hours ago
#v9W4AoQL
#devtopython#devto#dev#test#mutation
Reading 0:00
15s threshold

Tuần trước mình review một PR có coverage 94%, CI xanh, test chạy chưa tới 10 giây. Nhìn rất ổn. Rồi mình thử đổi >= thành > trong hàm tính phí ship. Test vẫn xanh. Đổi return total thành return 0 , test vẫn xanh. Lúc đó mình nhận ra coverage chỉ cho biết dòng code nào đã được chạy , chứ không cho biết test có kiểm tra kết quả hay không . Bài viết đang hot trên Dev.to "Four Ways a Test Can Lie to You" nói đúng vấn đề này. Hôm nay mình chia sẻ cách mình dùng mutation testing để bắt những test "nói dối", với Python (mutmut) và JavaScript/TypeScript (StrykerJS).

Mutation testing là gì, và tại sao coverage không đủ

Ý tưởng rất đơn giản: tool tự động tạo ra các phiên bản lỗi nhỏ của code (gọi là mutant ), ví dụ đổi + thành - , < thành <= , True thành False , xóa một câu lệnh. Sau đó nó chạy test suite với từng mutant:

Test fail → mutant bị killed . Tốt, test của bạn phát hiện được lỗi.

Test vẫn pass → mutant survived . Có một bug tiềm ẩn mà test không bắt được.

Mutation score = killed / tổng mutant.…

Continue reading — create a free account

Join HashtagPLUS to read full articles, follow hashtags, vote, and join the conversation.