Cập nhật: Xem this question too.
tôi chỉ có thể trả lời một số bộ phận ở đây:
là okay để phá vỡ tất cả phụ thuộc sử dụng giao diện chỉ để làm cho một lớp học kiểm chứng? Nó liên quan đến chi phí đáng kể khi chạy vì nhiều cuộc gọi ảo thay vì các lời gọi phương thức đơn giản.
Nếu hiệu suất của bạn sẽ bị ảnh hưởng quá nhiều vì nó, không (điểm chuẩn!). Nếu sự phát triển của bạn bị quá nhiều, không (ước tính thêm nỗ lực). Nếu nó có vẻ như nó sẽ không quan trọng nhiều và giúp đỡ về lâu dài và giúp bạn với chất lượng, có.
Bạn luôn có thể 'kết bạn' với các lớp thử nghiệm của mình hoặc đối tượng TestAccessor qua đó các thử nghiệm của bạn có thể điều tra nội dung trong đó. Điều đó tránh làm cho tất cả mọi thứ có thể được gửi động chỉ để thử nghiệm. (Nghe có vẻ hơi giống một chút công việc.)
Thiết kế giao diện có thể kiểm tra không dễ dàng. Đôi khi bạn phải thêm một số phương thức bổ sung để truy cập vào nội bộ chỉ để thử nghiệm. Nó làm cho bạn rạn nứt một chút nhưng nó tốt để có và thường xuyên hơn không phải là những chức năng hữu ích trong các ứng dụng thực tế là tốt, sớm hay muộn.
Nếu tôi thực hiện tái cấu trúc, nó xảy ra rất thường xuyên mà tôi phải hoàn toàn viết lại bài kiểm tra đơn vị vì những thay đổi logic lớn. Mã của tôi thay đổi rất thường xuyên thay đổi logic cơ bản của việc xử lý dữ liệu. Tôi không thấy một cách để viết các bài kiểm tra đơn vị mà không phải thay đổi trong một quá trình tái cấu trúc lớn.
Tái cấu trúc lớn bằng cách định nghĩa thay đổi rất nhiều, bao gồm cả các thử nghiệm. Hãy vui vì bạn có chúng vì chúng sẽ kiểm tra các công cụ sau khi tái cấu trúc.
Nếu bạn dành nhiều thời gian để tái cấu trúc hơn là tạo các tính năng mới, có lẽ bạn nên suy nghĩ kỹ hơn trước khi viết mã để tìm giao diện tốt hơn có thể chịu được nhiều thay đổi hơn. Ngoài ra, viết đơn vị kiểm tra trước khi giao diện được ổn định là một nỗi đau, không có vấn đề gì bạn làm.
Bạn càng có nhiều mã chống lại giao diện thay đổi nhiều, bạn càng phải thay đổi mã nhiều lần. Tôi nghĩ vấn đề của bạn nằm ở đó. Tôi đã quản lý để có giao diện đủ ổn định ở hầu hết các nơi, và refactor chỉ phần bây giờ và sau đó.
Hy vọng điều đó sẽ hữu ích.
Nó không phải là tôi không nghĩ trước khi mã hóa. Rất thường các yêu cầu thay đổi sau khi khách hàng đã nhìn thấy việc thực hiện ban đầu của một tính năng mới. Một lý do khác là đôi khi không cần phải thực hiện nhanh và dơ bẩn vì lý do tiếp thị. Trong trường hợp này tôi không bận tâm với các bài kiểm tra đơn vị nhưng đôi khi việc hack nhanh chóng và dơ bẩn trở thành điều thực sự vì một lịch trình chặt chẽ. Nó không phải là dễ dàng để làm cho mess này có thể kiểm tra sau này. – frast
Xin lỗi, tôi không có ý nói chính xác điều đó. ;) Tôi biết cuộc sống thực là khó khăn để làm việc với đôi khi. Quick'n bẩn hacks đi kèm với một khoản nợ, hoặc là thiếu kiểm tra, cần thiết refactoring/dọn dẹp hoặc thường là cả hai. Bạn trả bằng tiền mặt trước (công việc thích hợp) hoặc trả tiền thuê nhà sau đó (dọn dẹp). Không nhận được xung quanh đó. Thật khó để làm việc trong điều kiện mà bạn không thể ảnh hưởng đến điều đó. (Đã ở đó ...) – Macke