Tôi đang làm việc với một số mã hiện có, cố gắng thêm vào nó và tăng các bài kiểm tra đơn vị cho nó. Nhưng chạy vào một số vấn đề với việc kiểm tra mã.Thiết kế Constructors cho Testability
Original vị thi công:
public Info() throws Exception
{
_ServiceProperties = new ServiceProperties();
_SshProperties = new SshProperties();
}
Tôi biết rằng điều này là xấu, và rõ ràng là không thể kiểm chứng. Trong môi trường junit, lớp này sẽ không tạo ra mọi thời gian vì nó sẽ không thể tìm thấy các thuộc tính cần thiết để xây dựng chính nó. Bây giờ, tôi biết rằng lớp này sẽ có thể kiểm chứng được nhiều hơn với sự thay đổi đơn giản của việc di chuyển bất cứ thứ gì được bắt đầu bằng 'mới' làm tham số.
Vì vậy, tôi kết thúc với:
New vị thi công:
public Info(ServiceProperties srvProps, SshProperties sshProps) throws Exception
{
_ServiceProperties = srvProps;
_SshProperties = sshProps;
}
nào cho phép tôi đúng đơn vị kiểm tra lớp Thông tin này. Vấn đề tuy nhiên, bây giờ là tất cả những gì công việc được đẩy lên một số lớp khác:
Một số khác Class' Phương pháp:
public void useInfo() throws Exception
{
ServiceProperties srvProps = new ServiceProperties();
SshProperties sshProps = new SshProperties();
Info info = new Info(srvProprs, sshProprs);
doStuffWithInfo(info);
}
Bây giờ phương pháp này là không thể kiểm chứng. Tất cả những gì tôi đã làm là đẩy các công trình xây dựng của các đối tượng bất động sản này đang xảy ra, và một nơi nào đó một số đoạn mã sẽ bị mắc kẹt thực sự phải gọi là "mới".
Đây là sự chà xát đối với tôi: Tôi không thể tìm ra cách phá vỡ chuỗi sự kiện này chỉ đơn giản là đẩy những cuộc gọi "mới" này đến một nơi khác. Tôi đang thiếu gì?
Bạn cũng có thể có một cái nhìn tại của chúng tôi Tài liệu khóa học mùa xuân: http://www.trainologic.org/courses/info/2 –