Bạn không bỏ sót bất kỳ nguyên tắc nào, nhưng đó là vấn đề thường gặp. Tôi nghĩ rằng mỗi đội giải quyết nó (hoặc không) theo cách riêng của họ.
Tác dụng phụ
Bạn sẽ tiếp tục có vấn đề này với bất kỳ chức năng trong đó có tác dụng phụ. Tôi đã tìm thấy cho các chức năng tác dụng phụ tôi phải làm các xét nghiệm mà đảm bảo một số hoặc tất cả các nội dung sau:
- rằng nó đã được/không được gọi
- Số lần nó được gọi là
- gì đối số là được chuyển đến số
- Thứ tự cuộc gọi.
Đảm bảo điều này trong thử nghiệm thường có nghĩa là vi phạm đóng gói (Tôi tương tác và biết với việc triển khai). Bất cứ lúc nào bạn làm điều này, bạn sẽ luôn luôn ngầm thử nghiệm để thực hiện. Điều này sẽ khiến bạn phải cập nhật kiểm tra bất cứ khi nào bạn cập nhật các phần triển khai mà bạn đang trưng ra/thử nghiệm.
Reusable Mocks
Tôi đã sử dụng mocks thể tái sử dụng để có hiệu lực tuyệt vời. Họ thương mại-off là việc thực hiện của họ là phức tạp hơn bởi vì nó cần phải được hoàn chỉnh hơn. Bạn giảm thiểu chi phí cập nhật các bài kiểm tra để phù hợp với các nhà tái cấu trúc.
Chấp nhận TDD
lựa chọn khác là thay đổi những gì thử nghiệm của bạn cho. Vì điều này thực sự là về việc thay đổi chiến lược thử nghiệm của bạn, nó không phải là một cái gì đó để nhập vào nhẹ nhàng. Bạn có thể muốn thực hiện một phân tích nhỏ trước và xem liệu nó có thực sự phù hợp với hoàn cảnh của bạn hay không.
Tôi đã từng thực hiện TDD với các bài kiểm tra đơn vị. Tôi gặp phải một vấn đề mà tôi cảm thấy chúng ta không cần phải giải quyết. Cụ thể xung quanh các nhà tái cấu trúc, tôi nhận thấy chúng tôi thường phải cập nhật nhiều thử nghiệm. Các nhà tái cấu trúc này không nằm trong một đơn vị mã, mà là việc tái cơ cấu các thành phần chính. Tôi biết nhiều người sẽ nói vấn đề là những thay đổi lớn thường xuyên, không phải là thử nghiệm đơn vị. Có lẽ một số sự thật cho những thay đổi lớn là một phần kết quả của quy hoạch/kiến trúc của chúng tôi. Tuy nhiên, nó cũng được thực hiện đối với các quyết định kinh doanh gây ra những thay đổi trong chỉ đường. Những nguyên nhân hợp pháp và khác có tác dụng đòi hỏi những thay đổi lớn đối với mã. Kết quả cuối cùng là các nhà tái cấu trúc lớn trở nên chậm chạp và đau đớn hơn là kết quả của tất cả các bản cập nhật thử nghiệm.
Chúng tôi cũng gặp lỗi do các sự cố tích hợp mà các kiểm tra đơn vị không bao gồm. Chúng tôi đã thực hiện một số thử nghiệm chấp nhận thủ công. Chúng tôi thực sự đã thực hiện khá nhiều công việc để thực hiện các bài kiểm tra chấp nhận ở mức độ thấp nhất có thể. Chúng vẫn là hướng dẫn sử dụng, và chúng tôi cảm thấy có quá nhiều sự giao thoa giữa các bài kiểm tra đơn vị và bài kiểm tra chấp nhận rằng cần có một cách để giảm thiểu chi phí triển khai cả hai.
Sau đó, công ty đã sa thải. Đột nhiên, chúng tôi không có cùng một lượng tài nguyên để lập trình và bảo trì. Chúng tôi đã được đẩy để có được lợi nhuận lớn nhất cho tất cả mọi thứ chúng tôi đã làm bao gồm thử nghiệm. Chúng tôi bắt đầu bằng cách thêm những gì chúng tôi gọi là kiểm tra ngăn xếp một phần để trang trải các vấn đề tích hợp chung mà chúng tôi có. Chúng hóa ra rất hiệu quả đến mức chúng tôi bắt đầu làm thử nghiệm đơn vị ít cổ điển hơn. Chúng tôi cũng đã loại bỏ các bài kiểm tra chấp nhận thủ công (Selenium). Chúng tôi từ từ đẩy lên nơi các bài kiểm tra bắt đầu thử nghiệm cho đến khi chúng tôi chủ yếu làm bài kiểm tra chấp nhận, nhưng không có trình duyệt. Chúng tôi sẽ mô phỏng phương thức GET, POST hoặc PUT cho một bộ điều khiển cụ thể và kiểm tra các tiêu chí chấp nhận.
- Cơ sở dữ liệu đã được cập nhật một cách chính xác
- Các mã trạng thái HTTP đúng được trả về
- Một trang được trả lại rằng:
- là hợp lệ html 4,01 nghiêm ngặt
- chứa thông tin chúng tôi muốn gửi quay lại người dùng
Chúng tôi đã kết thúc có ít lỗi hơn. Cụ thể hầu như tất cả các lỗi tích hợp, và lỗi do các nhà tái cấu trúc lớn biến mất gần như hoàn toàn.
Có sự cân bằng. Nó chỉ bật ra những thuận xa hơn so với khuyết điểm cho tình hình ra. Nhược điểm:
- Thử nghiệm thường phức tạp hơn và hầu hết mọi người đều kiểm tra một số tác dụng phụ.
- Chúng tôi có thể biết khi nào có sự cố xảy ra, nhưng nó không được nhắm mục tiêu như các bài kiểm tra đơn vị vì vậy chúng tôi phải thực hiện thêm gỡ lỗi để theo dõi vấn đề ở đâu.
Bất cứ khi nào bạn cần chế nhạo thứ gì đó, trước tiên hãy nghĩ rằng nếu bạn có thể tạo mocks bằng tay.Bạn thường sẽ thấy rằng mô hình trực tuyến thường có mùi phức tạp. Nếu đó là trường hợp sau đó tạo mocks thủ công khác đi cho on-the-fly mocks –
Một cái gì đó để xem xét: http://en.wikipedia.org/wiki/Interface_segregation_principle – TrueWill