2013-06-06 34 views
7

Những người luôn được nói trong TDD rằngViết junits trong Test Driven Development trước khi viết mã thực?

chúng ta nên viết junits thậm chí trước khi chúng tôi viết mã thực tế.

Bằng cách nào đó tôi không thể hiểu được điều này đúng tinh thần. Tôi hy vọng điều đó có nghĩa là bạn chỉ cần viết các phương thức trống có chữ ký đúng và trường hợp thử nghiệm của bạn dự kiến ​​sẽ không thành công ban đầu

Nói cách tiếp cận TDD tôi cần có danh sách khách hàng.

Theo sự hiểu biết của tôi, tôi sẽ viết các phương pháp có sản phẩm nào như dưới đây

public List<CustomerData> getCustomers(int custId){ 

return null; 
} 

Bây giờ tôi sẽ viết test junit nơi tôi sẽ kiểm tra kích thước như 10 (mà tôi đang eactually mong đợi). Thê nay đung không?

Về cơ bản câu hỏi của tôi là ở TDD, Làm thế nào chúng ta có thể viết test junit trước khi viết mã thực tế?

Trả lời

5

Tôi hy vọng những gì nó có nghĩa là bạn chỉ cần viết phương pháp rỗng wih chữ ký đúng

Yes. Và với hầu hết các IDE hiện đại, nếu bạn viết một tên phương thức mà không tồn tại trong bài kiểm tra của bạn, chúng sẽ tạo ra một sơ khai cho bạn.

Nói theo cách tiếp cận TDD, tôi cần có danh sách khách hàng. whats đúng cách để tiến hành?

Ví dụ của bạn không hoàn toàn ở đó. Bạn muốn thử nghiệm cho một mảng có độ dài 0, nhưng bạn đã trả về nó: trước tiên bạn phải trả về null, thử nghiệm rõ ràng sẽ thất bại.

Sau đó sửa đổi phương pháp để thử nghiệm thành công.

Sau đó, tạo phương thức thử để thêm khách hàng. Kiểm tra không thành công. Sửa nó. Rửa sạch. Nói lại. Vì vậy, về cơ bản: với TDD, bạn bắt đầu và viết kiểm tra mà bạn BIẾT sẽ thất bại, và sau đó sửa mã của bạn để chúng hoạt động.

Recommended read.

+0

Sự hiểu biết sửa đổi của tôi với điều này là, tôi hy vọng 10 hồ sơ trong cơ sở dữ liệu của tôi, sau đó tôi mong đợi các trường hợp thử nghiệm để kiểm tra 10 kích thước (bây giờ ngay sau khi tôi thực hiện phương pháp thực tế của tôi , nó sẽ tự động sửa chữa trường hợp thử nghiệm). Đúng? –

+0

Có. Một nguy hiểm, tất nhiên, là để kiểm tra cho 2, 3, vv Bạn nên kiểm tra hành vi. Ngoài ra, mocks sẽ được giúp đỡ rất nhiều ở đây. Ví dụ, bạn có thể tạo một mô hình của lớp dữ liệu của bạn trả về 10 đối tượng và kiểm tra hành vi của lớp của bạn với điều đó. Theo kinh nghiệm cá nhân, tôi thấy rằng tôi càng sử dụng TDD (khá nhiều luôn luôn), tôi càng có thể thiết kế mọi thứ một cách dễ dàng, đó là một phần thưởng ... – fge

+0

Nếu điều này có thể giúp, tại thời điểm này, tôi viết một lớp đơn giản để kiểm tra, cam kết [tại đây] (https://github.com/fge/msg-simple/commit/9d6067dca8a4ede9d4e23a0bf8f750980997e53b). Sau đó, tôi sẽ kiểm tra giá trị null, sau đó giá trị thực sự được thêm vào. Ngay bây giờ, thử nghiệm duy nhất không thành công. – fge

4

Đó là một phần đúng.

Sử dụng IDE (Eclipse, IntelliJ) bạn có thể tạo thử nghiệm. Trong thử nghiệm đó gọi một phương thức (không tồn tại) và sử dụng công cụ tái cấu trúc tạo một phương thức có chữ ký thích hợp.

Đó là một mẹo giúp làm việc với TDD dễ dàng hơn và thú vị hơn.

Theo Now i will write junit test case where i will check the size as 0. Is this Right? bạn nên viết bài kiểm tra fails và cung cấp việc triển khai phù hợp.

7

Thường thì bạn sẽ viết thử nghiệm cùng với bộ xương của mã. Ban đầu, bạn có thể viết triển khai không hoạt động (ví dụ: ném một số UnsupportedOperationException) và điều đó sẽ kích hoạt lỗi kiểm tra. Sau đó, bạn sẽ xác định việc triển khai cho đến khi bài kiểm tra của bạn trôi qua.

Bạn cần phải thực dụng về điều này. Rõ ràng bạn không thể biên dịch thử nghiệm của bạn cho đến khi ít nhất đơn vị của bạn trong biên dịch thử nghiệm, và vì vậy bạn phải làm một số lượng tối thiểu của công việc thực hiện cùng với thử nghiệm của bạn.

Check-out this recent Dr Dobbs editoral, mà thảo luận một cách chính xác thời điểm này và vai trò của chủ nghĩa thực dụng xung quanh này, đặc biệt là bởi mavens thực hành này (Kent Beck et al)

Một nguyên tắc quan trọng của TDD là bạn viết không có mã mà không cần viết đầu tiên kiểm tra đơn vị không thành công. Nhưng trên thực tế, nếu bạn nói chuyện với những người ủng hộ chính của TDD (như Kent Beck, người đã phổ biến kỹ thuật này, và Bob Martin, người đã dạy cho hàng ngàn nhà phát triển), bạn thấy rằng cả hai trong số họ viết một số mã mà không cần viết bài kiểm tra trước. Họ không - tôi nên nhấn mạnh điều này - xem những khoảnh khắc như sai sót của đức tin, nhưng đúng hơn là tính thực dụng cần thiết của nhà phát triển thông minh.

+1

Như bạn đã nói "nếu bạn nói chuyện với những người ủng hộ chính của TDD (như Kent Beck, người đã phổ biến kỹ thuật này, và Bob Martin, người đã dạy cho hàng nghìn nhà phát triển), bạn thấy rằng cả hai đều viết một số mã mà không cần viết bài kiểm tra trước. " bạn có thể chỉ đạo các ví dụ meto nơi họ đã viết một số mã mà không cần viết bài kiểm tra đầu tiên. Về cơ bản tôi muốn biết nơi để vẽ dòng –