Vượt qua một bài kiểm tra từ thời điểm bạn viết nó có thể là một vấn đề với quy trình TDD của bạn, nhưng bản thân nó không có nghĩa là nó sai.
Bài kiểm tra của bạn có thể vượt qua ngẫu nhiên.
Giả sử bạn có một phương thức trả lại chi phí rút tiền bằng ATM. Bây giờ bạn được yêu cầu thêm vào quy tắc mới rằng nếu chủ sở hữu thẻ trên 60 tuổi, chi phí là 0. Vì vậy, chúng tôi kiểm tra nó, hy vọng nó sẽ thất bại:
assertTrue(ATM.withdrawalCost(clientOver60) == 0)
Bạn có thể mong đợi điều này thất bại. Nhưng nó đã qua, vì khách hàng tình cờ là khách hàng VIP, người đã rút tiền miễn phí. Bây giờ bạn có thể quay lại phương thức rút tiền và sửa đổi nó để làm cho nó thất bại, nhưng điều đó không thực sự có ý nghĩa nhiều. Viết một bài kiểm tra mới để hiển thị mã của bạn là sai:
assertTrue(ATM.withdrawalCost(nonVIPclientOver60) == 0)
Bây giờ nó thất bại, bạn đi và mã cho đến khi nó đi qua, sau đó lặp lại cho đến khi hoàn thành.
Bạn có nên xóa bài kiểm tra sau đó, vì nó không có sự khác biệt? Không! Nó mô tả chức năng dự kiến của phương thức rút tiền ATM. Nếu bạn xóa nó và một ngày nào đó, chi phí rút tiền 0 cho khách hàng VIP thay đổi, khẳng định đầu tiên vẫn là đúng.
Đã nói điều này, đối với TDD thích hợp, bạn không nên mã hóa mọi thứ trước các bài kiểm tra của mình và sau đó kiểm tra những điều bạn biết bạn sẽ vượt qua. Tôi không xem xét trường hợp này bạn đang hỏi về.
Tôi tin rằng chu trình chuyển mã không thành công có nghĩa là để tránh "Tôi sẽ viết 3 bài kiểm tra này sẽ thất bại và 2 bài kiểm tra này sẽ vượt qua vì tôi đã mã hóa nó để biết bài kiểm tra sẽ là gì". Bạn nên biết một số người có thể cảm thấy khác. Nghe lý do của họ, họ có thể có giá trị quá.