Một cuộc tranh luận gần đây trong nhóm của tôi làm tôi tự hỏi. Chủ đề cơ bản là chúng ta sẽ chi trả bao nhiêu và những gì với các bài kiểm tra chức năng / tích hợp (chắc chắn, chúng không giống nhau nhưng ví dụ là giả khi không quan trọng).
Giả sử bạn có một lớp "trình điều khiển" giống như:
public class SomeController {
@Autowired Validator val;
@Autowired DataAccess da;
@Autowired SomeTransformer tr;
@Autowired Calculator calc;
public boolean doCheck(Input input) {
if (val.validate(input)) {
return false;
}
List<Stuff> stuffs = da.loadStuffs(input);
if (stuffs.isEmpty()) {
return false;
}
BusinessStuff businessStuff = tr.transform(stuffs);
if (null == businessStuff) {
return false;
}
return calc.check(businessStuff);
}
}
Chúng tôi cần rất nhiều thử nghiệm đơn vị để chắc chắn (ví dụ: nếu xác thực không thành công hoặc không có dữ liệu trong DB, ...), đó là điều không thể.
Vấn đề chính của chúng tôi và về những gì chúng tôi không thể đồng ý là có bao nhiêu bài kiểm tra tích hợp sẽ bao gồm nó :-)
Tôi đứng về phía chúng ta sẽ nhắm đến các thử nghiệm tích hợp ít hơn (kim tự tháp thử nghiệm). Những gì tôi sẽ trình bày từ đây chỉ là một con đường hạnh phúc - không vui khi thực thi trở lại từ dòng cuối cùng, chỉ để xem nếu tôi đặt những thứ này lại với nhau thì nó sẽ không nổ tung.
Vấn đề là không dễ để biết tại sao thử nghiệm lại cho kết quả sai và điều đó khiến một số kẻ cảm thấy khó chịu về nó (ví dụ: nếu chúng ta chỉ kiểm tra giá trị trả về, thì ẩn rằng thử nghiệm có màu xanh lá cây bởi vì ai đó đã thay đổi xác nhận và nó trả về false). Chắc chắn, vâng, chúng tôi có thể bao gồm tất cả các trường hợp nhưng đó sẽ là một imho quá mức cần thiết.
Có ai có một quy tắc tốt cho loại vấn đề này? Hoặc một đề nghị? Đọc hiểu? Nói chuyện? Bài viết trên blog? Bất cứ điều gì về chủ đề này?
Cảm ơn rất nhiều trước!
PS: Sry cho ví dụ xấu xí nhưng thật khó để dịch một phần mã cụ thể thành một ví dụ. Vâng, người ta có thể tranh luận về việc ném ngoại lệ / sử dụng loại trả lại khác / v.v. nhưng bàn tay của chúng ta ít nhiều bị ràng buộc vì sự phụ thuộc bên ngoài.
PS2: Tôi đã chuyển chủ đề này từ SO ở đây (câu hỏi ban đầu, được đánh dấu tạm dừng )