Giả sử tôi đang sử dụng TDD để tạo một số lớp A. Sau khi hoàn thành và có thanh "xanh", tôi quyết định muốn trích xuất một số lớp B chỉ với các phương thức tĩnh từ lớp A sử dụng một số công cụ tái cấu trúc. Bây giờ tôi có lớp A và lớp B cả hai bài kiểm tra đầy đủ, nhưng chỉ qua lớp kiểm tra cho lớp A. Tôi có nên tạo lớp thử nghiệm cụ thể cho chức năng của lớp B, mặc dù đó có phải là kiểm tra trùng lặp không?Các lớp thử nghiệm đơn vị thông qua các lớp kiểm tra khác
Trả lời
Như mọi khi, nó phụ thuộc vào hoàn cảnh của bạn. Điều gì làm bạn quan tâm?
hành vi Nhìn chung
Nếu bạn đang xây dựng một hệ thống để sử dụng nội bộ, hoặc thậm chí dịch vụ một công cộng (web), nơi mà các phần mềm bạn đang vận chuyển là toàn bộ hệ thống, bạn không cần phải chăm sóc quá nhiều về một lớp học duy nhất. Nếu bạn đang xây dựng một hệ thống, sau đó kiểm tra hệ thống.
Miễn là nó được kiểm tra, bạn biết rằng hệ thống của bạn hoạt động chính xác. Tuy nhiên, bạn có thể gặp phải tình huống sau vài tháng, bạn nhận ra rằng bạn không cần lớp A
gốc nữa, vì vậy bạn xóa nó và các bài kiểm tra đơn vị tương ứng của nó. Điều này có thể khiến phạm vi kiểm tra của B
bị giảm, do đó, có thể là một ý tưởng hay để theo dõi các xu hướng bảo hiểm mã.
hành vi Unit
Nếu bạn đang xây dựng một (class) thư viện, hoặc khuôn khổ, bạn đang vận chuyển mỗi lớp công chúng như một phần của sản phẩm. Nếu bạn có nhiều người dùng thư viện của mình, bạn sẽ cần bắt đầu suy nghĩ về cách tránh các thay đổi đột phá.
Một trong những cách hiệu quả nhất để tránh thay đổi đột phá là bao gồm từng lớp theo bài kiểm tra đơn vị. Miễn là bạn don't change the tests, bạn biết rằng những thay đổi đột phá sẽ không xảy ra nếu tất cả các thử nghiệm đều có màu xanh lục. Tuy nhiên, điều đó đòi hỏi bạn phải kiểm tra tất cả các lớp học và thành viên công cộng của bạn.
Do đó, nếu bạn trích xuất B
thành lớp công khai, giờ đây đây là lớp mà người tiêu dùng khác có thể phụ thuộc và sẽ là thay đổi đột ngột nếu bạn thay đổi. Vì vậy, bạn nên bao gồm nó với các bài kiểm tra mới. Nếu bạn đang xây dựng một đơn vị, hãy kiểm tra thiết bị.
Tôi thêm vào đánh dấu câu trả lời Tôi muốn thêm rằng tạo ra một lớp như B là một mùi mã cho tôi. Nó không phải là cách đó tất nhiên, nhưng rất có thể là mục đích của nó sẽ không rõ ràng, và có lẽ là vi phạm các nguyên tắc SOLID. Nếu bạn thấy mình gặp vấn đề khi đặt tên cho lớp, đó có thể là trường hợp. – spacedoom
@spacedoom Không phải là một chút khắc nghiệt? Việc trích xuất một lớp từ một lớp khác có thể là một Refactoring hoàn toàn hợp lệ. Thực tế là trong trường hợp này nó tĩnh có thể là một mùi mã, nhưng vì tôi biết rằng bạn là một fan hâm mộ F #, có lẽ một lớp tĩnh chỉ là một mô-đun chức năng chờ đợi để thực hiện. Tuy nhiên, SOLID nó không phải là, tôi đồng ý với điều đó :) –
Tôi chắc chắn không có ý định khắc nghiệt, chỉ cần đưa ra và đối tượng theo định hướng bình luận cho một câu hỏi được gắn thẻ oop.Tôi đã không chọn giải nén các lớp học nói chung, chỉ các lớp như B. Tôi khá chắc chắn tên của nó sẽ là một cái gì đó giống như AHelper, và chúng tôi không muốn điều đó, phải không? Dù sao, bạn đang chết tiệt nó sẽ là tốt hơn nếu nó được viết như là mô-đun chức năng trong F #! :) – spacedoom
Từ những gì bạn đã mô tả câu trả lời là tạo một thử nghiệm mới khác. Nếu một trong hai thay đổi của bạn (hoặc người khác không quen thuộc với "bài kiểm tra chia sẻ") lớp kia sẽ không còn được kiểm tra nữa.
Nếu điều này dường như lãng phí, đặt mã kiểm tra chung trong một lớp thứ ba ...
- 1. Kiểm tra đơn vị trong QTestLib - chạy thử nghiệm/kiểm tra đơn trong lớp/tất cả các bài kiểm tra
- 2. Đơn vị thử nghiệm một lớp ứng dụng Flask
- 3. Thừa kế kiểm tra mũi Python: đồ đạc thử tải đơn vị từ các lớp con
- 4. Thử nghiệm đơn vị với Lớp Truy cập Dữ liệu
- 5. Làm cách nào để tạo các lớp thử nghiệm có thể được sử dụng trong cả bài kiểm tra đơn vị Android và kiểm tra đơn vị?
- 6. Visual Studio không chạy tất cả các bài kiểm tra đơn vị trong một lớp học thử nghiệm
- 7. Python unittest, bỏ qua các kiểm tra khi sử dụng lớp thử nghiệm cơ sở
- 8. Tải hình ảnh thử nghiệm để kiểm tra đơn vị
- 9. Hai lớp, gọi lại và thử nghiệm đơn vị
- 10. Kiểm tra đơn vị - Có phải là hình thức không tốt để thử nghiệm đơn vị gọi các bài kiểm tra đơn vị khác
- 11. mùi thử nghiệm đơn vị
- 12. Thử nghiệm đơn và phân lớp
- 13. Nhập mã thử nghiệm trong kiểm tra đơn vị elixir
- 14. Thử nghiệm tính năng so với đơn vị kiểm tra
- 15. Chạy thử nghiệm từ các lớp bên trong qua Maven
- 16. Mô hình thử nghiệm đơn vị Các lớp học kế thừa từ NSManagedObject
- 17. Thử nghiệm đơn vị với các giao dịch thủ công và giao dịch theo lớp
- 18. Thử nghiệm đơn vị Các phương pháp Spring @Around AOP
- 19. Quy tắc thử nghiệm đơn vị
- 20. Các bài kiểm tra đơn vị cho các lớp Java "bản địa" ở đâu?
- 21. Truy cập Symfony 2 container qua thử nghiệm Đơn vị?
- 22. Thử nghiệm đơn vị C#, cách kiểm tra lớn hơn
- 23. Nơi để đặt các tệp thử nghiệm để kiểm tra đơn vị
- 24. Mã thử nghiệm đơn vị gọi các phương thức tĩnh
- 25. Thử nghiệm đơn vị các chuỗi được bản địa hóa
- 26. Icefaces thử nghiệm đơn vị
- 27. Kiểm tra đơn vị Catch.hpp: Cách tạo động các trường hợp thử nghiệm?
- 28. Qt: chạy thử nghiệm đơn vị từ nhiều lớp kiểm tra và tóm tắt kết quả từ tất cả chúng
- 29. Thử nghiệm đơn vị sơ bộ
- 30. Thực hiện thử nghiệm đơn vị với các phụ thuộc lồng nhau và các lớp Nhà máy
Bản sao: http://stackoverflow.com/questions/21482602/should-i-write-tests-for-class-a-if-its-covered-from-class-b/21482748#21482748 – Mik378
Đẹp tìm, cảm ơn – jordan