Làm thế nào để mô phỏng nhiều phụ thuộc cần thiết cho các bài kiểm tra tích hợp?Mocking cho các bài kiểm tra tích hợp
Tôi sử dụng Mockito cho bài kiểm tra đơn vị 'thuần' của mình. 'Tinh khiết' trong trường hợp này có nghĩa là thử nghiệm một lớp duy nhất, chế nhạo tất cả các phụ thuộc của nó. Đẹp.
Bây giờ, đến kiểm tra tích hợp. Hãy nói rằng trong trường hợp này là một thử nghiệm hội nhập sẽ kiểm tra một cái gì đó như thế này:
- nhắn được đặt trên một hàng đợi
- nhắn được 'xử lý'
- Response message được đặt trên một hàng đợi phản ứng
Hãy cũng nói rằng quá trình xử lý xảy ra ở bước 2 là những thứ nghiêm trọng. Nó dựa trên nhiều tương tác cơ sở dữ liệu, trên nhiều dịch vụ bên ngoài, hệ thống tệp, tất cả mọi thứ. Ngoài ra còn có rất nhiều tác dụng phụ mà dòng chảy sẽ kích hoạt, vì vậy tôi không thể chỉ đơn giản là đảm bảo rằng phản ứng là chính xác - Tôi cần phải xác minh các tác dụng phụ.
Mỗi phụ thuộc trong số này được bao bọc bởi một lớp dịch vụ không trạng thái đơn lẻ, điều này làm cho chúng trở nên tốt đẹp và có thể mô phỏng.
Mọi người xử lý việc này như thế nào?
Tôi rất thích sử dụng Mockito để tôi có thể xác minh các tác dụng phụ mà luồng trên sẽ có. Tuy nhiên, tài liệu của Mocktio (và đến một mức độ lớn nó thực hiện) dường như chiến đấu mạnh mẽ chống lại việc sử dụng nó trong các ngữ cảnh khác với các thử nghiệm đơn vị 'thuần khiết'. Tôi đã cố gắng để đi tuyến đường này, nhưng
- Thật khó để cư dữ liệu còn sơ khai (như có rất nhiều của nó)
- Thật khó để có mùa xuân tiêm những trường hợp stubbed vào đậu của tôi
- Thật khó để 'đặt lại' các mocks để tôi có thể xác minh một tập hợp tương tác khác mà không xóa các phần tử.
EDIT
Tôi biết rằng tôi có thể xử lý các vấn đề cơ sở dữ liệu với một cái gì đó giống như một thể hiện HSQLDB, nhưng vẫn có những vấn đề của các dịch vụ bên ngoài. Để lặp lại, tôi không thể dựa vào những dịch vụ đang được lên, đang ở trong trạng thái mà tôi yêu cầu, vv Các tùy chọn duy nhất tôi thấy có để chế giễu chúng.
Whatdaya làm gì?
Chỉ cần làm rõ, vì thử nghiệm tích hợp có thể được thực hiện theo hai cách. Có vẻ như bạn có nghĩa là thử nghiệm tích hợp như trong, kiểm tra rằng các thành phần kết nối hoạt động tốt với nhau (về cơ bản là thử nghiệm các API). Tuy nhiên, đôi khi tích hợp đề cập đến end-to-end, vì vậy bạn sẽ không thử dịch vụ của bạn và thực sự cho phép nó để đạt cơ sở dữ liệu. Việc làm rõ này có thể giúp giải đáp ... Vui lòng xem http://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-test để làm rõ thêm các loại –
thực sự áp dụng cho bất kỳ kiểm tra (tích hợp hoặc end-to-end) mà đòi hỏi rất nhiều phụ thuộc bên ngoài. Ví dụ tôi có thể thay thế các cơ sở dữ liệu của tôi bằng một cá thể HSQLDB, nhưng tôi vẫn có tất cả các dịch vụ khác. Sẽ chỉnh sửa câu hỏi một chút để làm rõ .. –
Vì vậy, làm thế nào bạn giải quyết vấn đề mocking cuối cùng? – Pupsik