Thử nghiệm này là trích xuất một giao diện và xác minh rằng giao diện hiển thị bộ khởi động Boolean có tên IsRunning
.
Bài kiểm tra này có thể được viết trước khi interface
tồn tại và có thể trước khi mọi lớp bê tông IGame
tồn tại. Tôi sẽ tưởng tượng, nếu dự án là của bất kỳ sự trưởng thành nào, thì có những bài kiểm tra khác thực hiện việc triển khai thực tế và xác minh hành vi cho cấp đó, và có thể sử dụng chế nhạo trong bối cảnh cách ly truyền thống hơn là cố định hình dạng lý thuyết.
Giá trị của các loại kiểm tra này là nó buộc một người phải suy nghĩ về cách hình dạng hoặc vật thể sẽ được sử dụng. Một cái gì đó dọc theo dòng của "Tôi không biết chính xác những gì một trò chơi sẽ làm gì được nêu ra, nhưng tôi biết rằng tôi sẽ muốn kiểm tra xem nó đang chạy ...". Vì vậy, kiểu thử nghiệm này là nhiều hơn để thúc đẩy các quyết định thiết kế, cũng như xác thực hành vi.
Không phải là thử nghiệm có giá trị nhất trên hành tinh, nhưng phục vụ mục đích của nó theo ý kiến của tôi.
Chỉnh sửa: Tôi đã ở trên tàu đêm qua khi tôi đang đánh máy, nhưng tôi muốn giải đáp trực tiếp với Andrew Whitaker trong câu trả lời.
Người ta có thể cho rằng chữ ký trong chính giao diện là đủ để thực thi hợp đồng mong muốn. Tuy nhiên, điều này thực sự phụ thuộc vào cách bạn xử lý các giao diện của bạn và cuối cùng là cách bạn xác thực hệ thống mà bạn đang thử nghiệm.
Có thể có giá trị hữu hình trong việc nêu rõ chức năng này là một thử nghiệm. Bạn đang xác minh rõ ràng rằng đây là chức năng mong muốn cho một số IGame
.
Cho phép sử dụng trường hợp, giả sử rằng với tư cách là nhà thiết kế, bạn biết rằng bạn muốn hiển thị công khai cho IsRunning
, vì vậy bạn thêm nó vào giao diện.Nhưng hãy nói rằng một nhà phát triển khác nhận được điều này và thấy một thuộc tính, nhưng không thấy bất kỳ tập quán nào của nó ở bất kỳ nơi nào khác trong mã, người ta có thể giả định rằng nó đủ điều kiện để xóa (hoặc loại bỏ mã-thối, thường là một điều tốt) mà không có hại. Tuy nhiên, sự tồn tại của thử nghiệm này cho thấy sự hợp lý này nên tồn tại.
Nếu không có thử nghiệm này, nhà phát triển có thể sửa đổi giao diện, thả triển khai và dự án vẫn sẽ biên dịch và chạy có vẻ chính xác. Và nó sẽ được cho đến sau đó nhiều rằng ai đó có thể nhận thấy rằng giao diện đã được thay đổi.
Với thử nghiệm này, ngay cả khi nó xuất hiện như thể không có ai đang sử dụng nó, bộ thử nghiệm của bạn sẽ thất bại. Bản chất tự viết của bài kiểm tra cho bạn biết rằng ShouldReturnGameIsRunning()
, ít nhất nó sẽ sinh ra một cuộc trò chuyện nếu IGame
thực sự nên để lộ một số IsRunning
getter.
Thông thường không phải là vô nghĩa này. – sarnold
Bạn có hai điều khác nhau đang xảy ra trong câu hỏi này - "Mục đích của TDD là gì?" và "Điểm của bài kiểm tra này là gì?" - hãy cẩn thận để hai người tách biệt trong đầu của bạn. Giá trị (hoặc không) của TDD không thể được đánh giá một cách công bằng từ một thử nghiệm đơn lẻ (có thể là người nghèo). – Bevan
Tôi ước tôi có thể đóng tài khoản này dưới dạng bản sao của http://stackoverflow.com/questions/tagged/tdd?sort=votes&pagesize=50 –