Tôi đang làm việc để làm cho các lớp học của tôi có thể kiểm tra được đơn vị, sử dụng phép tiêm phụ thuộc. Nhưng một số trong các lớp này có rất nhiều khách hàng và tôi chưa sẵn sàng cấu trúc lại tất cả chúng để bắt đầu chuyển qua các phụ thuộc. Vì vậy, tôi đang cố gắng làm điều đó dần dần; giữ các phụ thuộc mặc định cho đến bây giờ, nhưng cho phép chúng bị ghi đè để thử nghiệm.
Một cách tiếp cận mà tôi quan tâm là chỉ chuyển tất cả các cuộc gọi "mới" sang các phương thức của riêng họ, ví dụ:
public MyObject createMyObject(args) {
return new MyObject(args);
}
Sau đó, trong các bài kiểm tra đơn vị của mình, tôi chỉ có thể phân lớp lớp này và ghi đè các hàm tạo, để chúng tạo các đối tượng giả thay thế.
Đây có phải là một cách tiếp cận tốt? Có bất kỳ nhược điểm?
Tổng quát hơn, có ổn không khi có các phụ thuộc được mã hóa cứng, miễn là bạn có thể thay thế chúng để thử nghiệm? Tôi biết cách tiếp cận ưa thích là yêu cầu rõ ràng chúng trong hàm tạo và cuối cùng tôi muốn đến đó. Nhưng tôi tự hỏi nếu đây là một bước đầu tốt.
Một nhược điểm vừa xảy ra với tôi: nếu bạn có các lớp con thực sự mà bạn cần kiểm tra, bạn không thể sử dụng lại lớp con kiểm tra mà bạn đã viết cho lớp cha. Bạn sẽ phải tạo một lớp con thử nghiệm cho mỗi lớp con thực sự và nó sẽ phải ghi đè cùng các hàm tạo.