Giả sử tôi có Trình quản lý lớp xuất phát từ Nhân viên lớp cơ sở và Nhân viên đó có phương thức getEmail () được thừa kế bởi Người quản lý . Tôi có nên kiểm tra xem hành vi của phương thức getEmail () của người quản lý trên thực tế có giống với nhân viên không?
Tại thời điểm các bài kiểm tra này được viết, hành vi sẽ giống nhau, nhưng tất nhiên tại một thời điểm nào đó trong tương lai ai đó có thể ghi đè phương thức này, thay đổi hành vi của nó và do đó phá vỡ ứng dụng của tôi. Tuy nhiên, có vẻ hơi lạ khi về cơ bản kiểm tra sự vắng mặt của mã trung gian.
(Lưu ý rằng phương thức tests Manager :: getEmail () không cải thiện phạm vi bảo hiểm mã (hoặc thực tế là bất kỳ số liệu chất lượng mã nào khác (?)) Cho đến khi Manager :: getEmail () được tạo / ghi đè.)
(Nếu câu trả lời là "Có", một số thông tin về cách quản lý các bài kiểm tra được chia sẻ giữa các lớp cơ sở và các lớp dẫn xuất sẽ hữu ích.)
Một công thức tương đương của câu hỏi:
Nếu một lớp dẫn xuất kế thừa một phương thức từ một lớp cơ sở, làm thế nào để bạn thể hiện (kiểm tra) xem bạn có mong đợi phương thức được kế thừa để:
- Hành xử theo cách chính xác giống như cơ sở hiện tại (nếu hành vi của cơ sở thay đổi, hành vi của phương thức dẫn xuất không);
- Hành xử chính xác giống như cơ sở cho mọi thời đại (nếu hành vi của lớp cơ sở thay đổi, hành vi của lớp dẫn xuất cũng thay đổi); hoặc là
- Hành vi tuy nhiên nó muốn (bạn không quan tâm đến hành vi của phương pháp này vì bạn không bao giờ gọi nó).
Manager
lớp họcEmployee
là sai lầm lớn đầu tiên.