Trong vài tuần qua tôi đã nghiên cứu và nghiên cứu cách lấp đầy khoảng trống trong phương pháp thử nghiệm của chúng tôi. Nói một cách đơn giản, các bài kiểm tra đơn vị là quá nhỏ và các bài kiểm tra tích hợp truyền thống là quá lớn.
Một kịch bản thường xuyên xuất hiện ở đâu A
và B
cả hai sử dụng thành phần C
. Tuy nhiên A
và B
có các yêu cầu hơi khác nhau cho, và đưa ra các giả định hơi khác nhau về C
. Nếu tôi là nhà phát triển về A
cách thức và nơi tôi kiểm tra các giả định của mình về C
?
Rõ ràng thử nghiệm đơn vị A
với các giả định bị chế giễu C
là tốt để thử nghiệm A
riêng rẽ, nhưng nó không tự kiểm tra các giả định đó.
Một khả năng khác là thêm các bài kiểm tra đơn vị cho C
. Tuy nhiên điều này không lý tưởng bởi vì, trong khi A
đang trong quá trình phát triển, việc thay đổi các bài kiểm tra C
với các giả định phát triển từ đó A
sẽ quá vụng về. Thật vậy A
, nhà phát triển thậm chí có thể không có quyền truy cập đầy đủ vào các bài kiểm tra đơn vị của C
(ví dụ: thư viện bên ngoài).
Để đóng khung này với một ví dụ cụ thể hơn: Giả sử rằng đây là một ứng dụng nút. A
và B
phụ thuộc vào C
việc đọc một tệp (trong số những thứ khác) và lưu trữ nội dung tệp trong đối tượng được truyền tới C
. Lúc đầu, tất cả các tệp C
xử lý đều nhỏ và có thể được đọc đồng bộ mà không bị chặn đáng kể. Tuy nhiên, nhà phát triển B
nhận ra rằng các tệp của mình đang trở nên rất lớn và cần phải chuyển sang C
đọc không đồng bộ. Điều này dẫn đến một lỗi đồng bộ hóa lẻ tẻ A
, vẫn giả sử C
đang đọc các tệp đồng bộ.
Đây là loại lỗi rất khó theo dõi từ các thử nghiệm tích hợp đầy đủ và có thể không bị bắt trong các thử nghiệm tích hợp. Nó cũng không bị bắt bởi A
các bài kiểm tra đơn vị vì các A
giả định của s bị chế giễu. Tuy nhiên, nó có thể dễ dàng bị bắt bởi một bài kiểm tra tích hợp "mini" chỉ thực hiện A
và C
.
Tôi chỉ tìm thấy một vài tài liệu tham khảo về loại thử nghiệm này. Tích hợp trong thử nghiệm tích hợp nhỏ , thành phần , thử nghiệm tích hợp đơn vị . Nó cũng liên quan phần nào đến hướng thử nghiệm của BDD hơn là thử nghiệm đơn vị TDD chính thức.
Làm thế nào để tôi lấp đầy khoảng trống thử nghiệm này? Cụ thể - nơi tôi đặt các bài kiểm tra như vậy? Làm cách nào để tôi chế nhạo các đầu vào A
và C
cho các thử nghiệm tích hợp "mini"? Và cần bao nhiêu nỗ lực để phân tách mối quan tâm kiểm tra giữa các bài kiểm tra này và bài kiểm tra đơn vị? Hoặc có cách nào tốt hơn để lấp đầy khoảng trống thử nghiệm?