2010-02-11 23 views
6

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

7

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.

+1

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

+0

Để 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. –

3

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.

+0

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

+0

@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. –

+2

@ 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. –

4

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.

2

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).

2

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.

0

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!

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