2009-04-16 34 views
6

Một vấn đề gặp phải với mutation testing là nó chậm, vì theo mặc định bạn chạy thử nghiệm đầy đủ (tệp thử nghiệm hoặc bộ tệp thử nghiệm) cho mỗi đột biến được tạo.Thực hiện kiểm tra đơn vị không nhanh chóng để thử nghiệm đột biến

Một cách để thực hiện thử nghiệm đột biến nhanh hơn là dừng chạy thử nghiệm cho một đột biến nhất định khi gặp phải một lỗi duy nhất (nhưng chỉ trong khi thử nghiệm đột biến). Thậm chí tốt hơn là để người thử nghiệm đột biến nhớ được thử nghiệm đầu tiên để giết đột biến cuối cùng là gì, và đưa nó cho người đột biến tiếp theo. Có điều gì trong ruby ​​làm một trong những điều này, hay là đặt cược tốt nhất của tôi để bắt đầu vá khỉ?

(Vâng, tôi biết kiểm tra đơn vị phải được nhanh chóng. Và hiển thị tất cả các bài kiểm tra thất bại nằm ngoài hữu ích của thử nghiệm đột biến, vì nó giúp bạn không chỉ đơn thuần xác định rằng cái gì là sai, nhưng xác định nơi nó đang xảy ra sai)

Chỉnh sửa: Tôi hiện đang sử dụng heckle với kiểm tra/đơn vị. Nếu nó không thể cho thử nghiệm/đơn vị để nhớ những bài kiểm tra thất bại giữa runnings, có thể heckle hoặc một cái gì đó chạy heckle có thể nhớ nó.

+0

và bạn chạy các thử nghiệm này như thế nào ...? –

Trả lời

2

Tốt nhất của bạn là kiểm tra heckle source từ github, vá và gửi bản vá đó cho nhà phát triển. Bạn nên có khả năng viết một Á hậu thử nghiệm tùy chỉnh cho heckle.

Vá khỉ không bao giờ là câu trả lời cho một cái gì đó như thế này. Trong thực tế, khỉ vá hầu như không bao giờ là câu trả lời cho bất cứ điều gì.

1

Một cách tiếp cận mà tôi đã bắt đầu sử dụng là viết các bài kiểm tra đơn vị cho từng phương pháp và đưa chúng vào các tệp riêng biệt, được tổ chức như rubyspecs. Tôi chạy từng spec riêng biệt, xác định phương pháp chính xác mà tôi muốn heckle. Tôi có một công việc cào cào để quản lý tất cả những điều này và in một bản báo cáo ở cuối với những đột biến thất bại, nếu có.

Cuối cùng, tôi nhận được phạm vi phủ sóng đầy đủ của từng phương pháp, mà không phải đợi kết quả mãi mãi. Cộng với nó thậm chí còn tốt hơn so với cách tiếp cận bình thường mà mọi người sử dụng, bởi vì tôi không nhận được bất kỳ sự bảo hiểm ngẫu nhiên nào - các thông số của mỗi phương thức phải bao gồm tất cả các đột biến của phương thức đó.

1

Công cụ mutant của tôi sử dụng tùy chọn rspec2 --fail-fast để dừng ngay lập tức khi gặp phải một ví dụ không thành công. Cùng với chiến lược --rspec-dm2 chỉ thực hiện các thử nghiệm đơn vị bị ảnh hưởng, chúng tôi nhận được thử nghiệm phủ sóng đột biến rất nhanh. Xem này asciicast cho một cuộc biểu tình (tốc độ).

Các vấn đề liên quan