Tôi đã cố gắng gắn bó với phương pháp TDD. Vì vậy, tôi đã thực hiện một số xét nghiệm và tất cả đều thất bại. Bây giờ tôi đang thực hiện. Nhưng bây giờ tôi đang thực hiện tôi đã thấy rằng các phương pháp quá đơn giản để thất bại. Đặc biệt tôi đã thực hiện mô hình quan sát và tất cả những gì xảy ra là tôi thông báo cho tất cả các quan sát viên đã đăng ký. Vì vậy, sử dụng một cho mỗi vòng lặp và gọi thông báo. Điều này chắc chắn âm thanh quá đơn giản để phá vỡ. Bây giờ tôi có các bài kiểm tra ở những nơi tôi nên xóa chúng? Điều này cũng có vẻ là một chút lãng phí thời gian. Vì vậy, tôi nên cố gắng và dự đoán các phương pháp mà sẽ là quá đơn giản để phá vỡ?Chúng ta có nên loại bỏ các xét nghiệm quá đơn giản để phá vỡ trong TDD
Trả lời
số
Các phương pháp có thể quá đơn giản để phá vỡ ngay bây giờ, nhưng điều đó không có nghĩa là họ sẽ không bao giờ cần phải được sửa đổi (và có thể bị hỏng) trong tương lai.
Bạn đang nói đây là quá đơn giản để thất bại:
for (i = 0; i < observers.length; ++i) {
// Notify observer observers[i]
}
Đó là xu hướng trao đổi suy nghĩ đó, nhưng xem xét sai lầm phổ biến này:
for (i = 0; i <= observers.length; ++i) {
// Notify observer observers[i]
}
Hoặc cái này:
for (i = 0; i < observers.length; ++j) {
// Notify observer observers[i]
}
Hoặc có thể các nhà quan sát không được thêm chính xác. Hoặc ... hoặc ... hoặc ...
Nếu bạn đã có các thử nghiệm, có vẻ như không cần thiết để xóa chúng và một tiên đề của phần mềm là các chức năng có xu hướng phát triển theo thời gian, vậy đơn giản là gì bây giờ có thể ít hơn xuống dòng - chính xác là loại điều mà các bài kiểm tra của bạn có nghĩa vụ giúp bạn.
Không cho mỗi câu. Câu lệnh For Each là một cấu trúc ngôn ngữ, do đó nó chủ yếu là RE-testing trình biên dịch. Nếu đó là một vòng lặp bình thường với int i = 0 vv thì tôi sẽ làm. – uriDium
@uriDium: Tốt rồi (bạn không chỉ ra ngôn ngữ hoặc cấu trúc bạn đang sử dụng, vì vậy tôi đã đi với một mẫu số chung). Điểm vẫn đứng vững; hầu như không có gì là quá đơn giản để có được sai bằng cách nào đó, và các chức năng có xu hướng phát triển phức tạp theo thời gian. –
@ T.J. Tôi đồng ý, có thể không có thử nghiệm điểm foreach, tuy nhiên bạn cũng đang thử nghiệm khối lặp, whos để nói rằng sẽ không chage là một iterator tùy chỉnh, nó nên tất nhiên có xét nghiệm riêng của nó, nhưng whos để nói điều này foreach sẽ không tìm thấy thứ gì đó mà các bài kiểm tra đó bị mất. –
Có; Nếu bạn đang thử nghiệm chức năng của trình biên dịch cơ bản/máy ảo, thử nghiệm của bạn quá đơn giản. Trừ khi, đó là, bạn không tin tưởng rằng phần cụ thể của trình biên dịch/máy ảo đang được thực hiện.
Nhưng, tất nhiên, thực tế kiểm tra phức tạp hơn một chút so với câu trả lời có/không cho câu hỏi này. Như đã lưu ý trong câu trả lời khác, nếu bạn đã viết các bài kiểm tra, đừng xóa chúng. Nhưng bạn cũng không nên sử dụng chúng trong một bối cảnh bao phủ mã như một đối số cho sự tự tin.
số
Bạn đang làm việc đó hoàn toàn đúng: kiểm tra văn bản rằng thất bại đầu tiên, sau đó sửa chữa chúng. Để lại những bài kiểm tra đó một mình, viết những bài phức tạp hơn trong tương lai nếu bạn nghĩ bạn sẽ cần chúng (ví dụ như để tái tạo lỗi).
Bạn càng có nhiều thử nghiệm, bạn sẽ càng ít đau đớn trong tương lai. Không bao giờ đơn giản.
Bây giờ bạn đã nhận được tất cả các thử nghiệm đó để vượt qua, hãy để chúng một mình. Nếu họ chạy đủ nhanh, họ sẽ không phải là gánh nặng cho bất cứ ai.
Tuy nhiên, trong tương lai, bạn có thể chỉ muốn viết một lần kiểm tra lỗi cùng một lúc. (Xem The Three Rules). Điều này là bởi vì nó sẽ cho phép thiết kế của bạn cải thiện trong khi bạn đang phát triển mã của bạn.
Khi bạn đã có tất cả các thử nghiệm của bạn thất bại và không thực hiện bạn đã sửa thiết kế của bạn và bây giờ làm việc của nó, bạn có thể loathed refactor thiết kế để cải thiện nó.
Tôi cũng nghi ngờ rằng bạn đã có một thời gian khó khăn khi triển khai mã của bạn vì mỗi bước triển khai có thể đã bị hỏng nhiều lần hơn, nhưng tôi chỉ đoán thôi!
- 1. Chúng ta có nên đơn vị kiểm tra đăng nhập?
- 2. Làm thế nào chúng ta có thể thực hiện các xét nghiệm đơn vị chống lại thao tác DOM?
- 3. Mới đối với TDD: Có các ứng dụng mẫu có xét nghiệm để chỉ ra cách thực hiện TDD không?
- 4. Làm thế nào để đối phó với những người phá vỡ TDD?
- 5. TDD: Có hợp lý để thử nghiệm tích hợp, nhưng không có thử nghiệm đơn vị?
- 6. Khi nào chúng ta nên sử dụng lớp học và khi chúng ta không nên
- 7. Tại sao chúng ta nên sử dụng mã hóa ui khi chúng ta có Specflow?
- 8. Dấu ngoặc đơn không phá vỡ?
- 9. Làm thế nào để loại bỏ một khoảng trắng không bị phá vỡ trong Ruby
- 10. models.py trở nên to lớn, cách tốt nhất để phá vỡ nó là gì?
- 11. Khi nào tôi nên phá vỡ một chức năng?
- 12. Quá nhiều thử nghiệm trên chế độ xem đơn giản?
- 13. cho mỗi ... phá vỡ
- 14. Tôi có nên xem xét Khung XML đơn giản cho Java không?
- 15. Chúng ta có nên đóng HttpPostedFile.Inputstream, khi chúng ta đã hoàn thành việc sử dụng nó?
- 16. Phương thức FileChannel tryLock() có kiểm tra khóa hoặc chỉ phá vỡ chúng không?
- 17. Chúng ta có nên viết bình luận rộng rãi không?
- 18. rspec thử nghiệm một bộ điều khiển bài thay đổi params của tôi từ biểu tượng để các chuỗi và phá vỡ các xét nghiệm của tôi
- 19. Nếu chúng ta có quá nhiều mã nhận xét trong .net nó có ảnh hưởng đến hiệu suất mã không?
- 20. Các mẫu thiết kế hữu ích cho thử nghiệm đơn vị/TDD?
- 21. Chúng ta có 'khai báo' jQuery hay chỉ đơn giản là sử dụng nó?
- 22. Chúng ta có nên đi theo cách của Corona không?
- 23. Khi nào chúng ta nên xem xét sử dụng riêng tư hoặc được bảo vệ?
- 24. Các phụ thuộc thông tư trong StructureMap - chúng có thể bị phá vỡ với việc phun thuộc tính không?
- 25. Ứng dụng của chúng tôi phá vỡ ứng dụng WCF của chúng tôi
- 26. Phá vỡ vòng lặp for trong Java
- 27. tab CSS đơn giản - cần phải phá vỡ biên giới trên tab hoạt động
- 28. Chúng ta có nên theo dõi các khuyết tật trong những thứ khác ngoài mã không?
- 29. removeChild(): làm thế nào để loại bỏ thụt lề quá?
- 30. Fitnesse- Các xét nghiệm có nên nói chuyện với cơ sở dữ liệu không?
Cảm ơn nhận xét. Sau đó, tôi nên để lại chúng cho bây giờ và thêm chúng sau này nếu phương pháp thay đổi. Rõ ràng nguy hiểm là bạn quên cập nhật các bài kiểm tra đơn vị. NHƯNG ngay cả khi thực hiện thay đổi, trước tiên chúng ta phải viết một bài kiểm tra đơn vị cho sự thay đổi để chúng ta nên nắm bắt nó. – uriDium
Để lại bài kiểm tra đơn giản ở đó, nếu phương pháp cần thay đổi và đó là thay đổi đột phá, thì bạn sẽ cần phải sửa đổi các bài kiểm tra đơn vị. Tuy nhiên, nếu nó không phải là một thay đổi phá vỡ và các bài kiểm tra ngừng làm việc, sau đó có một lỗi trong sự thay đổi của bạn. –