Tôi hỏi vì tôi đang cố gắng sử dụng một khung mocking (Mockito) mà không cho phép bạn giả lập các phương thức tĩnh. Nhìn vào nó tôi đã tìm thấy khá một vài bài viết trên blog nói rằng bạn nên có càng ít phương pháp tĩnh càng tốt, nhưng tôi đang gặp khó khăn trong việc quấn quanh đầu tôi. Cụ thể là tại sao các phương thức không sửa đổi trạng thái toàn cầu và về cơ bản là các phương thức trợ giúp. Ví dụ tôi có một lớp gọi là ApiCaller
có một số phương pháp tĩnh. Một trong những mục đích của phương thức tĩnh là thực hiện một cuộc gọi HTTP, xử lý mọi vấn đề tùy chỉnh mà máy chủ của chúng tôi có thể đã trả lại (ví dụ: người dùng không đăng nhập) và trả về phản hồi. Để đơn giản hóa, một cái gì đó như:Tại sao lại sử dụng các phương thức trợ giúp tĩnh trong Java?
public class ApiCaller {
...
public static String makeHttpCall(Url url) {
// Performs logic to retrieve response and deal with custom server errors
...
return response;
}
}
Để sử dụng tất cả điều này tôi phải làm là gọi ApiCaller.makeHttpCall(url)
Bây giờ tôi có thể dễ dàng thực hiện điều này một phương pháp không tĩnh như:
public class ApiCaller {
...
public String makeHttpCall(Url url) {
// Performs logic to retrieve response and deal with custom server errors
...
return response;
}
}
và sau đó sử dụng phương pháp này hãy gọi new ApiCaller().makeHttpCall()
nhưng điều này có vẻ như là phí phụ trội. Bất cứ ai có thể giải thích tại sao điều này là xấu và nếu có một giải pháp tốt hơn để làm cho các phương pháp không tĩnh (khác hơn là chỉ cần loại bỏ các từ khóa) để tôi có thể stub ra các phương pháp này bằng cách sử dụng khuôn khổ mocking?
Cảm ơn!
Hoàn toàn không có gì sai với một phương pháp tĩnh, nếu nó là một hàm "thuần túy", hoặc nếu nó chỉ tham chiếu đến "hệ thống" các công cụ sao cho nó không có trạng thái cục bộ. Nếu nó tham chiếu globals bạn cần phải tread một chút cẩn thận hơn, mặc dù. –
@HotLicks Một số ví dụ về "công cụ hệ thống" là gì? Ngoài ra, một số ví dụ về tình trạng địa phương là gì? Hệ thống tệp có được tính là trạng thái cục bộ không? Có một trang web không? –
"Công cụ hệ thống" có thể là, ví dụ: truy xuất thống kê lưu trữ quy trình hoặc tìm nạp thời gian trong ngày hoặc một số thông tin như vậy. "Trạng thái cục bộ" ngụ ý rằng phương thức này đang stashing dữ liệu trong một 'static' hoặc một số thứ như vậy - nó thực sự là một đối tượng giả vờ là không. –