Đây là câu hỏi tuyệt vời! Tôi nghĩ nguyên nhân sâu xa của nó là do sau đây, chúng tôi đang sử dụng JUnit không chỉ để thử nghiệm đơn vị. Vì vậy, câu hỏi nên được chia ra:
- Tôi có nên sử dụng Mockito.verify () trong tích hợp (hoặc bất kỳ thử nghiệm cao hơn đơn vị nào khác) không?
- Tôi có nên sử dụng Mockito.verify () trong thử nghiệm đơn vị hộp đen của mình không?
- Tôi có nên sử dụng Mockito.verify () trong thử nghiệm đơn vị hộp trắng của mình không?
vì vậy nếu chúng ta bỏ qua kiểm tra đơn vị cao hơn, câu hỏi có thể được đặt lại " Sử dụng kiểm tra đơn vị hộp trắng với Mockito.verify () tạo ra cặp đôi tuyệt vời giữa kiểm tra đơn vị và triển khai có thể của tôi, tôi có thể tạo một số " hộp màu xám không " kiểm tra đơn vị và tôi nên sử dụng quy tắc nào cho việc này ".
Bây giờ, chúng ta hãy đi qua tất cả các bước này.
* - Tôi có nên sử dụng Mockito.verify () trong tích hợp (hoặc bất kỳ thử nghiệm cao hơn đơn vị nào khác) không? * Tôi nghĩ rằng câu trả lời rõ ràng là không, hơn nữa, bạn không nên sử dụng giả cho việc này. Bài kiểm tra của bạn phải càng gần với ứng dụng thực càng tốt. Bạn đang kiểm tra trường hợp sử dụng hoàn chỉnh, không phải là một phần của ứng dụng.
* kiểm tra đơn vị hộp đen so với kiểm thử đơn vị hộp trắng * Nếu bạn đang sử dụng phương pháp tiếp cận hộp đen bạn thực sự đang làm gì, bạn cung cấp (tất cả các lớp tương đương) đầu vào, trạng thái và kiểm tra rằng bạn sẽ nhận được đầu ra mong đợi. Theo cách tiếp cận này, việc sử dụng giả nói chung là hợp lý (bạn chỉ bắt chước rằng họ đang làm đúng; bạn không muốn kiểm tra chúng), nhưng gọi Mockito.verify () là không cần thiết.
Nếu bạn đang sử dụng phương pháp hộp trắng, bạn thực sự đang làm gì, bạn đang kiểm tra hành vi của đơn vị mình. Trong phương pháp này, việc gọi tới Mockito.verify () là điều cần thiết, bạn nên xác minh rằng đơn vị của bạn hoạt động như bạn mong đợi.
quy tắc ngón tay cái để kiểm tra hộp xám
Vấn đề với kiểm thử hộp trắng là nó tạo ra sự khớp nối cao. Một giải pháp khả thi là thực hiện kiểm tra hộp xám, không kiểm thử hộp trắng. Đây là loại kết hợp kiểm tra hộp đen trắng. Bạn đang thực sự kiểm tra hành vi của đơn vị của mình như trong thử nghiệm hộp trắng, nhưng nói chung, bạn làm cho nó không thực hiện khi có thể . Khi có thể, bạn sẽ chỉ thực hiện một kiểm tra như trong trường hợp hộp đen, chỉ cần khẳng định rằng đầu ra là những gì bạn mong đợi. Vì vậy, bản chất của câu hỏi của bạn là khi có thể.
Điều này thực sự khó khăn. Tôi không có một ví dụ hay, nhưng tôi có thể cho bạn ví dụ. Trong trường hợp đã được đề cập ở trên với equals () vs equalsIgnoreCase (), bạn không nên gọi Mockito.verify (), chỉ cần xác nhận đầu ra. Nếu bạn không thể làm điều đó, hãy chia mã của bạn thành đơn vị nhỏ hơn, cho đến khi bạn có thể làm điều đó. Mặt khác, giả sử bạn có một số @Service và bạn đang viết @ Web-Service về cơ bản là trình bao bọc cho @Service của bạn - nó ủy thác tất cả các cuộc gọi đến @Service (và thực hiện một số xử lý lỗi bổ sung). Trong trường hợp này, việc gọi tới Mockito.verify () là điều cần thiết, bạn không nên sao chép tất cả các kiểm tra mà bạn đã thực hiện cho @Serive, xác minh rằng bạn đang gọi tới @Service với danh sách tham số chính xác là đủ.