Tôi đang cố gắng tìm hiểu thêm về JUnit và TDD, nhưng tôi đang gặp phải một số vấn đề với việc ghép nối giữa các trường hợp thử nghiệm.Giảm Khớp nối giữa các Trường hợp Kiểm tra
Khi tôi viết một trường hợp thử nghiệm cho một API kiểu dữ liệu cụ thể, giả sử là Deque<T>
, làm cách nào tôi có thể giới hạn khớp nối giữa các trường hợp thử nghiệm? Ví dụ, nếu tôi đang viết một trường hợp thử nghiệm đối với phương pháp insertFirst(T item)
, có vẻ như đơn giản để giả định rằng tôi sẽ có thể khẳng định hai điều sau khi gọi phương thức trên một đối tượng khởi tạo đúng cách:
- Kích thước của
Deque
đối tượng phải được tăng thêm - Nếu sau đó tôi gọi phương thức
T removeFirst()
tương ứng, nó sẽ trả về tham chiếu đến đối tượng tôi đã chèn với lệnh gọi ban đầu.
Tuy nhiên, điều này tạo ra sự ghép nối không mong muốn giữa ít nhất hai trường hợp thử nghiệm, trong đó một trường hợp thử nghiệm phụ thuộc vào việc triển khai đúng phương pháp API khác. Ví dụ, để cho trường hợp thử nghiệm này được thông qua, tôi sẽ cần thực hiện chính xác để kiểm tra số lượng các mục trong Deque
và cũng để loại bỏ các mục. Nếu thử nghiệm của tôi cho một trong những phương pháp đó là không chính xác hoặc không đầy đủ vì bất kỳ lý do gì, thì thử nghiệm của tôi cho phương pháp insertFirst
sẽ tự động bị nghi ngờ.
Thực tiễn tốt nhất để tránh trường hợp này là gì? Cách tiếp cận của tôi để viết các trường hợp thử nghiệm sai theo một cách nào đó?
Tôi hiểu những gì bạn đang nói, nhưng điều này không tạo ra sự phụ thuộc vòng tròn của các phương pháp? Để kiểm tra chèn, tôi phải sử dụng loại bỏ, và để kiểm tra loại bỏ, tôi đã sử dụng chèn? Điều này có vẻ sai. Nó có thể là tôi chỉ không có đủ kinh nghiệm với những ý tưởng và tôi sẽ sớm cảm thấy thoải mái với việc không thoải mái. Cảm ơn bạn đã làm rõ. – crlane
@crlane: Vâng, nó tạo ra một số loại phụ thuộc vòng tròn. Đó là lý do tại sao bạn không thể nói * bất cứ điều gì * về lớp học của bạn nếu ngay cả một bài kiểm tra thất bại. Chỉ khi các bài kiểm tra * tất cả * trôi qua, bạn biết rằng mọi thứ hoạt động như mong đợi. –
@crlane: Vui lòng xem câu trả lời được cập nhật để biết ví dụ cụ thể. –