Có nên thay đổi các phương pháp riêng để bảo vệ cho thử nghiệm JUNIT không?Thay đổi phương pháp riêng để bảo vệ để thử nghiệm
Trả lời
Đôi khi hữu ích, vâng.
Nếu lớp học có thể mở rộng, hãy đảm bảo đặt phương thức cuối cùng.
Ngoài ra, hãy ghi lại thực tế rằng phương pháp không được gọi là lớp con hoặc lớp bên ngoài của cùng một gói.
Tôi sử dụng chú thích Guava @VisibleForTesting để làm rõ rằng phương pháp trên thực tế phải là riêng tư.
Cảm ơn bạn đã mở mắt cho @VisibleForTesting. Tôi không biết điều này tồn tại. Nó vẫn còn cảm thấy đây là một chút không hoàn hảo ở chỗ nó tác động đến cú pháp của việc thực hiện chỉ nhằm mục đích thử nghiệm, nhưng nó tốt hơn là phơi bày các thành viên và các phương thức cần được riêng tư. Và việc hạn chế thử nghiệm đối với các phương thức giao diện dường như là một hạn chế quá nghiêm ngặt và đôi khi không thực tế. – Lolo
Bạn có thể đặt gói phương thức cục bộ thay thế.
Bạn có thể gọi phương thức riêng tư bằng cách sử dụng phản chiếu hoặc bạn có thể quyết định rằng phương pháp private
không được kiểm tra trực tiếp, chỉ gián tiếp.
Không nói chung là không. Ý tưởng thử nghiệm đơn vị là để kiểm tra ... đơn vị. Hay nói cách khác là triển khai các phương thức giao diện. Nếu bạn muốn thử nghiệm một phương pháp mà bạn không thể "nhìn thấy" thì đây có thể là một mùi mã. Có lẽ bạn đã không tách logic kinh doanh của bạn đủ từ mã giao diện người dùng hoặc một cái gì đó.
Vì vậy, ý tưởng tốt nhất là suy nghĩ lại kiến trúc của bạn. Nhưng nếu phương án thay thế sẽ không kiểm tra mã của bạn thì tốt hơn hết là nên bảo vệ các phương thức đó.
Mặc dù bạn muốn đặt lại cấu trúc như @ user714965 được đề xuất, PowerMock's MockPrivate có thể thực hiện chế độ nhạo báng mà không cần mở khả năng hiển thị của các phương thức riêng tư của bạn.
Viết thử nghiệm của bạn trước tiên thường dẫn đến thiết kế mà bạn không cần phải thử phương pháp riêng tư.
- 1. Phương pháp riêng thử nghiệm đơn vị: Mẫu mặt tiền
- 2. Phương pháp thử nghiệm
- 3. Phương pháp riêng Thử nghiệm đơn vị với Jasmine
- 4. Thử nghiệm phương pháp thay vì thử nghiệm toàn bộ tệp trong Netbeans w/JUnit
- 5. phương pháp được bảo vệ bằng mocking
- 6. Phương pháp nào ưu tiên để viết "bảo vệ"?
- 7. Công cụ Java để thử nghiệm các phương pháp riêng tư?
- 8. respond_to? và phương pháp được bảo vệ
- 9. Phương pháp thử nghiệm đơn vị phụ thuộc
- 10. Ghi đè phương pháp được bảo vệ
- 11. các lớp trừu tượng thử nghiệm đơn vị và các phương pháp được bảo vệ bên trong chúng
- 12. Khi thử nghiệm với rspec, nơi để đặt phổ biến "phương pháp thử nghiệm tiện ích"?
- 13. Java: Mẫu ủy quyền và phương pháp được bảo vệ
- 14. Mockito bỏ qua phương pháp tĩnh để thử nghiệm
- 15. Đảm bảo ứng dụng ASP.NET MVC để thử nghiệm beta?
- 16. biến riêng tư hoặc được bảo vệ?
- 17. Doxygen: ẩn phương pháp riêng tư/được bảo vệ ... và mẹo
- 18. Mocking một phương pháp chung được bảo vệ với Moq
- 19. Cách bảo vệ REST API riêng lẻ
- 20. Đảm bảo đầu vào của các phương thức riêng tư/được bảo vệ?
- 21. Làm cách nào để thử nghiệm các phương thức riêng với DUnit?
- 22. Phương pháp thử nghiệm đơn vị với tệp IO
- 23. Các phương pháp tĩnh PHP có thể hợp pháp có được sự bảo vệ riêng tư hay không?
- 24. Tìm ra bảo hiểm thử nghiệm
- 25. Được bảo vệ và hủy riêng tư
- 26. WPF MVVM - Đơn vị Thử nghiệm một lệnh - Riêng tư so với phương pháp công cộng?
- 27. Làm cách nào để bạn buộc thay đổi hướng trong thử nghiệm Thiết bị Android?
- 28. Thay thế cho PhantomJS để Thử nghiệm
- 29. Phương pháp thử nghiệm nào đi cùng? [Rails]
- 30. MSTest xác định thứ tự để chạy các phương pháp thử nghiệm như thế nào?
Tại sao phải không? Bạn thay đổi một cái gì đó trước khi bạn kiểm tra, tôi không thể thấy bất kỳ lý do cho nó? – Nanne
Hầu như chắc chắn không phải là một ý tưởng hay; nếu bạn đang trực tiếp kiểm tra các phương thức bên trong của một lớp, bạn nên xem xét tái cấu trúc chúng thành một lớp riêng biệt. –
Tôi đã thực hiện điều này trong trường hợp một phương thức riêng trả về một số tài nguyên không có sẵn trong môi trường thử nghiệm đơn vị và tôi muốn thử nghiệm một số phương thức khác (không riêng tư) gọi nó. Bằng cách làm cho nó được bảo vệ, tôi có thể ghi đè lên nó, để nó trả về một số stub/mock thay vì tài nguyên không có sẵn. Điều này có nghĩa là một bài kiểm tra đơn vị sau đó trở thành khả thi và tôi đã không thể tìm thấy một cách khác vòng này, nhưng nó ít hơn lý tưởng. –